我有两个表,希望为左联接中的所有行更新T1中的字段.
举个简单的例子,更新以下结果集的所有行:
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL
这MySQL manual条规定:
多个表更新语句可以使用SELECT语句中允许的任何类型的联接,例如LEFT join.
但在有文档记录的多表更新中,我找不到这样做的正确语法.
正确的语法是什么?
我有两个表,希望为左联接中的所有行更新T1中的字段.
举个简单的例子,更新以下结果集的所有行:
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL
这MySQL manual条规定:
多个表更新语句可以使用SELECT语句中允许的任何类型的联接,例如LEFT join.
但在有文档记录的多表更新中,我找不到这样做的正确语法.
正确的语法是什么?
UPDATE t1
LEFT JOIN
t2
ON t2.id = t1.id
SET t1.col1 = newvalue
WHERE t2.id IS NULL
请注意,对于SELECT
,使用NOT IN
/NOT EXISTS
语法更有效:
SELECT t1.*
FROM t1
WHERE t1.id NOT IN
(
SELECT id
FROM t2
)
有关性能详细信息,请参阅我博客中的文章:
LEFT JOIN
比NOT IN
的表现不幸的是,MySQL
不允许在UPDATE
语句的子查询中使用目标表,这就是为什么需要坚持使用效率较低的LEFT JOIN
语法.