gpt4 book ai didi

mysql - 更新未按要求工作

转载 作者:行者123 更新时间:2023-11-30 01:33:16 24 4
gpt4 key购买 nike

我在表中更新时遇到问题。在我的下面,我更新了 userdeleted 列的标志,我还想使用 CurrentTimestamp 值更改该行的值,但在我在 中添加了一个条件之后SET,我的所有行值都会更新为当前时间戳。

UPDATE dpuserapplication t1 
LEFT OUTER JOIN temp_userapplication t2
ON t1.userName = t2.userName
AND t1.ApplicationName = t2.ApplicationName
AND t1.groupName = t2.groupName
SET t1.userDeleted = CASE WHEN t2.ID IS NULL THEN 1 ELSE 0 END,
t1.CreatedDate = CURRENT_TIMESTAMP;

最佳答案

发生这种情况是因为 LEFT OUTER JOIN,它会返回 dpuserapplication 的所有行,除非您指定 WHERE 子句。由于您没有指定任何修改时间戳的条件,因此它会在每一行上进行修改。

尝试添加条件:

UPDATE dpuserapplication t1
LEFT OUTER JOIN temp_userapplication t2
ON t1.username = t2.username
AND t1.applicationname = t2.applicationname
AND t1.groupname = t2.groupname
SET t1.userdeleted = CASE
WHEN t2.id IS NULL THEN 1
ELSE 0
END,
t1.createddate = CASE
WHEN t2.id IS NOT NULL THEN CURRENT_TIMESTAMP
ELSE t1.createddate
END;

参见this fiddle .

发表评论后,如果您只想更新 userdeleted 曾设置为 1 且现在设置为 0 的行:

UPDATE dpuserapplication t1
LEFT OUTER JOIN temp_userapplication t2
ON t1.username = t2.username
AND t1.applicationname = t2.applicationname
AND t1.groupname = t2.groupname
SET t1.userdeleted = CASE
WHEN t2.id IS NULL THEN 1
ELSE 0
END,
t1.createddate = CASE
WHEN t2.id IS NOT NULL AND t1.userdeleted = 1 THEN CURRENT_TIMESTAMP
ELSE t1.createddate
END;

参见this fiddle .

在这个 fiddle 中:

  • u1 的 userdeleted = 1,但符合条件。其状态更改为 0,并且日期已更新。
  • u2 的 userdeleted = 0,并且符合条件。其状态设置为 0(无变化),但日期未更新。
  • u3 不符合条件,没有任何反应。

关于mysql - 更新未按要求工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17207701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com