【发布时间】:2011-08-31 22:14:44
【问题描述】:
问题:我想更新与左连接(或其他快速解决方案)不匹配的行。 初始目标:更新 mytable1 的记录,其中 state=0 并且(XOR!)列“a”与 mytable2 匹配,或列“b”与 mytable2 匹配(“a”和“b”不应同时匹配!)。将两个表的记录设置为 state=5。
我尝试过(但失败了):
update mytable1 as t1
left join mytable2 as t2 on (t1.a=t2.a and t1.b=t2.b)
set t1.state=5,t2.state=5
where t1.state=0 and t2.state=0 and t2.a is null;
如您所见,我尝试加入所有匹配 BOTH 值的记录,以便更新不匹配的记录,同时更新 mytable2 中不匹配的行。 mytable1 中的行得到更新,但 table2 中的行没有更新。我可以更新与左连接匹配的行,但这是我认为会影响性能的行的 99%(我确实问过这个问题,所以我从来没有比较过;)。
感谢您的宝贵时间。
【问题讨论】:
-
如果 t2 中没有匹配的行,你想如何更新 t2.state?
-
是的,所有与左连接不匹配但仍具有 state=0 的行(在两个表中!)都应该得到更新。 state!=0 的行不应在任一表中获得任何更新。感谢您的帮助,Benoit。
标签: mysql sql left-join sql-update