我试图在与第二个表联接后更新表。更新仅适用于第一个SET
。UPDATE'tableA JOIN tableB'仅适用于第一个SET(条件)
下面是代码:
update Table_A
join Table_B on Table_A.date = Table_B.date
set Table_A.columnA = case
when Table_A.date = Table_B.date then Table_B.columnA
else Table_A.columnA
end,
Table_A.columnB = case
when Table_A.field = 'aaa' then Table_A.columnA * 5
when Table_A.field = 'bbb' then Table_A.columnA * 10
else Table_A.columnB
end,
Table_A.columnC = '1000'
;
我在MySQL运行这个,当我从表中返回的结果似乎UPDATE
仅适用于第一个SET
。在这种情况下,它是'columnA'。
我再次运行此脚本,我可以看到'columnB'中更新的结果。
我再次运行它,我也在'columnC'中更新了结果。
因此,我必须对SET
中的每个条件(总共3个)运行脚本三次。
UPD:我相信问题是更新的字段正用于接下来的SET
。 'columnA'在第一个SET
更新,然后'columnB'使用'columnA'。但是脚本没有使用更新过的'columnA',而是使用了旧的NULL。
这似乎不太可能。您能否提供样本数据,您希望发生什么以及实际发生了什么? –
@GordonLinoff我更新了问题。也许这有帮助。 –
当然,'update'使用列的“旧”值。无论数据库如何,'update'都是如此。 “旧”的价值观是正确的; “新”值在左边。 –