我有两个表:
TABLE A
id | user_id | name
------+-----------+-------
1 | 122 | 'Bill'
2 | 123 | 'Jim'
3 | 124 | 'Sally'
TABLE B
id | user_id | title
------+-----------+-------
1 | 122 | 'Boss'
2 | 999 | 'Manager'
3 | 124 | 'Worker'
我想用 name = 'foo'
更新所有 A,其中表 B 中没有匹配的 user_id
。如果 user_id,则不要更新该行
存在于表B中。
所以在这种情况下,它只会将 Jim
更新为名称“foo”。
最佳答案
NOT EXISTS
应该是最简单、最安全和最快的:
UPDATE tbl_a a
SET name = 'foo'
WHERE NOT EXISTS (SELECT FROM tbl_b b WHERE b.user_id = a.user_id);
这对于 NULL
值也能正常工作。与 NOT IN
相反。见:
关于sql - 更新其他表中没有匹配项的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17997231/