小编典典

使用 LEFT JOIN 更新 MySQL 中的多个表

all

我有两个表,并且想为左连接中的所有行更新 T1 中的字段。

举个简单的例子,更新以下结果集的所有行:

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL

MySQL手册指出 :

多表 UPDATE 语句可以使用 SELECT 语句中允许的任何类型的连接,例如 LEFT JOIN。

但是我在记录的多表更新中找不到正确的语法。

什么是正确的语法?


阅读 178

收藏
2022-08-07

共1个答案

小编典典

UPDATE  t1
LEFT JOIN
        t2
ON      t2.id = t1.id
SET     t1.col1 = newvalue
WHERE   t2.id IS NULL

请注意,对于 a ,使用/语法SELECT会更有效:NOT IN``NOT EXISTS

SELECT  t1.*
FROM    t1
WHERE   t1.id NOT IN
        (
        SELECT  id
        FROM    t2
        )

有关性能详细信息,请参阅我博客中的文章:

不幸的是,MySQL不允许在UPDATE语句的子查询中使用目标表,这就是为什么您需要坚持使用效率较低的LEFT JOIN语法。

2022-08-07