我想更新具有多个连接的语句中的表。虽然我知道连接的顺序并不重要(除非您使用优化器提示),但我以某种方式对它们进行了排序,以便最直观地阅读。但是,这导致我要更新的表不是我开始使用的表,并且我无法更新它。
我想做的一个虚拟例子是这样的:
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 with JOIN 不是标准 SQL,MySQL 和 Microsoft SQL Server 都实现了自己的想法作为标准语法的扩展。
关于MySQL 更新连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331687/