這是因爲在LEFT OUTER JOIN
的,除非你指定一個WHERE
子句返回的dpuserapplication
所有行。由於您沒有指定修改時間戳的任何條件,因此它會在每一行上進行修改。
嘗試增加一個條件:
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。
在該小提琴:
- U1具有userdeleted = 1,但適合的條件。其狀態更改爲0,並更新日期。
- u2的userdeleted = 0,並符合條件。其狀態設置爲0(不變),但日期不更新。
- u3不符合條件,沒有任何反應。
我只想更新列userdeleted設置爲0而不是所有行的行。 –