我有两个表,并希望更新LEFT JOIN中所有行的T1中的字段 .
举个简单的例子,更新以下结果集的所有行:
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL
MySQL manual指出:
多表UPDATE语句可以使用SELECT语句中允许的任何类型的连接,例如LEFT JOIN .
但是,在记录的多表UPDATE中,我无法找到正确的语法 .
什么是正确的语法?
我有两个表,并希望更新LEFT JOIN中所有行的T1中的字段 .
举个简单的例子,更新以下结果集的所有行:
SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL
MySQL manual指出:
多表UPDATE语句可以使用SELECT语句中允许的任何类型的连接,例如LEFT JOIN .
但是,在记录的多表UPDATE中,我无法找到正确的语法 .
什么是正确的语法?
5 回答
我将更新表A中的字段文本
并得出这个结果:
只接受表B中的一个字段,但我会得出这个结果:
请注意,对于
SELECT
,使用NOT IN
/NOT EXISTS
语法会更有效:有关性能详细信息,请参阅我博客中的文章:
LEFT JOIN
的性能与NOT IN
相比不幸的是,
MySQL
不允许在UPDATE
语句的子查询中使用目标表,'s why you' ll需要坚持使用效率较低的LEFT JOIN
语法 .同样可以应用于数据已规范化的场景,但现在您希望表在第三个表中找到值 . 以下内容允许您使用第二个表所喜欢的第三个表中的信息更新表 .
这对于您拥有用户和组的情况非常有用,并且您希望用户能够添加他们自己的组名变体,因此最初您希望将现有组名导入到用户所在的字段中能够修改它 .