MySql更新连接表

我想在包含多个连接的语句中更新表。 虽然我知道连接的顺序并不重要(除非你使用优化器提示),但我命令它们以一种最直观的方式阅读。 但是,这会导致我想更新的表不是我开始使用的表,并且在更新时遇到问题。

我想要做的一个虚拟示例如下所示:

UPDATE b
FROM tableA a
JOIN tableB b
   ON a.a_id = b.a_id
JOIN tableC c
   ON b.b_id = c.b_id
SET b.val = a.val+c.val
WHERE a.val > 10
    AND c.val > 10;

有很多关于使用连接更新的文章,但是他们总是先更新表格。 我知道这在SQL Server中是可能的,希望它可能在MySQL中也是可行的!


MySQL中的多表UPDATE语法与Microsoft SQL Server不同。 您不需要说出要更新哪个表,这在SET子句中是隐含的。

UPDATE tableA a
JOIN tableB b
   ON a.a_id = b.a_id
JOIN tableC c
   ON b.b_id = c.b_id
SET b.val = a.val+c.val
WHERE a.val > 10
    AND c.val > 10;

MySQL的语法中没有FROM子句。

UPDATE JOIN不是标准的SQL,MySQL和Microsoft SQL Server都实现了自己的想法,作为标准语法的扩展。


你有错误的命令排序。 你可以阅读这里的语法(我知道,这很难阅读。

UPDATE tableA a
  JOIN tableB b
    ON a.a_id = b.a_id
  JOIN tableC c
    ON b.b_id = c.b_id
   SET b.val = a.val+c.val
 WHERE a.val > 10
   AND c.val > 10;

SQL小提琴


这个链接应该给你MySQL需要的语法,这里是一个例子。 你为什么需要加入这两张桌子? 是否限制记录更新? 我在问,因为你也可以做如下的事情:

update B set B.x=<value>
    where 
B.<value> is in(
    select A.y 
      from A left outer join B on A.<value>=B.<value>
)
链接地址: http://www.djcxy.com/p/16879.html

上一篇: MySql Update A Joined Table

下一篇: Copy data from one existing row to another existing row in SQL?