当前位置: 首页 > 面试题库 >

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

聂和宜
2023-03-14
问题内容

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

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

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

在MySQL手册指出:

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

但是我在记录的多表UPDATE中找不到执行此操作的正确语法。

正确的语法是什么?


问题答案:
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 JOINNOT IN

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



 类似资料:
  • 问题内容: 我知道您可以一次插入多行,是否可以在MySQL中一次更新多行(如在一个查询中)? 编辑:例如,我有以下内容 我想将以下所有更新合并到一个查询中 问题答案: 是的,这是可能的-您可以在插入的键更新中使用INSERT…。 使用您的示例:

  • 问题内容: 如何在MySQL中更新多个值? 这不起作用: 问题答案: 您需要在两个不同的值之间添加一个逗号。例如:

  • 问题内容: 我正在尝试使用此查询使用限制更新一组5行,但mysql显示错误..下面的一个正在工作 为什么第一个不起作用? 问题答案: 如果您确实必须这样做,可以使用以下方法:

  • 非常类似于使用PDO数组更新多个MySQL表列。 但是我使用了一个复杂的形式 更新只是给我一个没有错误的空白页??? 注意:使用了MySQLi,工作正常,只是更新到了PDO。 $data2返回了正确的数组。 这可能是订单吗?IE输出必须匹配列顺序? 分析了使用带有PDO的数组和https://guwii.com/bytes/update-multiple-database-columns-usin

  • 本文向大家介绍使用MySQL WHERE子句中的多个值进行更新,包括了使用MySQL WHERE子句中的多个值进行更新的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用WHERE子句中的多个值更新的查询- 让我们再次检查表记录- 这将产生以下输出-

  • 问题内容: 这一点效果很好: 它将列中的所有字段组加在一起。 我遇到的麻烦是得到此结果来更新另一个表中的另一列。 这就是我所拥有的: 任何建议,不胜感激。 问题答案: 您不能在内部使用update语句。您需要使用子选择进行分组。 像这样的东西: