MySql Update A Joined Table

Zug*_*alt 39 mysql join sql-update

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

我想做的一个虚拟例子是:

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;
Run Code Online (Sandbox Code Playgroud)

有许多关于使用联接进行更新的帖子,但是他们总是首先更新表.我知道这在SQL Server中是可能的,并且希望它在MySQL Too中可能!

Bil*_*win 94

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;
Run Code Online (Sandbox Code Playgroud)

MySQL的语法中没有FROM子句.

使用JOIN更新不是标准SQL,MySQL和Microsoft SQL Server都已经实现了自己的想法作为标准语法的扩展.

  • 这是我在很多搜索中遇到的唯一给出明确答案的答案,并说明了它与其他SQL语言的区别和原因。 (2认同)