一尘不染

MySQL更新联接表

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中也可能!


阅读 205

收藏
2020-05-17

共1个答案

一尘不染

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子句。

使用JOIN进行更新不是标准的SQL,并且MySQL和Microsoft SQL Server都实现了自己的想法,作为对标准语法的扩展。

2020-05-17