Mysql 更新未按要求工作
我对表中的更新有问题。在我的下面,我有一个列Mysql 更新未按要求工作,mysql,mysql-workbench,Mysql,Mysql Workbench,我对表中的更新有问题。在我的下面,我有一个列userdeleted的更新标志,我还想用CurrentTimestamp值更改该行的值,但在我在SET中添加了一个条件后,我的所有行值都更新为当前时间戳 UPDATE dpuserapplication t1 LEFT OUTER JOIN temp_userapplication t2 ON t1.userName = t2.userName AND t1.ApplicationName = t2.ApplicationName AND t1.g
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;
发生这种情况的原因是
左外部联接
,它返回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;
看
在注释之后,如果只想更新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;
看
在这把小提琴中:
- u1的userdeleted=1,但符合条件。其状态更改为0,并且日期已更新
- u2的userdeleted=0,符合条件。其状态设置为0(无更改),但日期未更新
- u3不符合条件,什么也没发生
ELSE
子句。已修复。它是否只更新状态从userdeleted 1更改为0i的行?我只想更新列userdeleted设置为0的行,而不是所有行。