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不符合条件,什么也没发生

我们能不能把像用于UserDeleted这样的case条件放在SET中,我是mysql新手,对此不太了解是的,好吧,没问题。但这不起作用。。在t1.userName=t2.userName和t1.ApplicationName=t2.ApplicationName和t1.groupName=t2.groupName SET t1.userDeleted=CASE上运行此脚本更新dpuserapplication t1 LEFT OUTER JOIN temp_userapplication t2后,所有行都会获得相同的时间戳。t2.ID为NULL时,则1否则0结束,t1.CreatedDate=当t2.ID为空时,则当前时间戳结束;哎呀,忘记了
ELSE
子句。已修复。它是否只更新状态从userdeleted 1更改为0i的行?我只想更新列userdeleted设置为0的行,而不是所有行。