MySQL 更新连接表

标签 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;

这里有很多关于使用连接更新的帖子,但是它们总是首先更新表。我知道这在 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/

相关文章:

mysql - 是否可以在 INSERT ON DUPLICATE ON DUPLICATE KEY UPDATE 中使用 'join'

MySQL 更新其他表中的多行多个值,给出重复值

mysql - 如何让 MySQL 的 "load data"正确地将非常大的整数导入 binary(16) 字段?

mysql - 类似 "group by"的列?

mysql - 如何在单个查询中连接不同表的多个随机值?

php - PDO 更新多条记录

mysql - 如何将常数设置为列中的最低数字?

php - 打印表中的记录数?

php - 使用 Zend_Db_Table_Abstract::insert() 延迟插入

mysql - 更新多行,但仅更新具有不同值的第一行