我想更新语句中包含多个联接的表.虽然我知道连接的顺序并不重要(除非您使用的是优化器提示),但我还是以某种最直观的方式对它们进行了排序.然而,这导致我想要更新的表不是我开始使用的表,并且我在更新它时遇到了困难.

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

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中的多表更新语法不同于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子句.

updatewithjoin不是标准的SQL,MySQL和microsoftsqlserver都实现了自己的 idea ,作为标准语法的扩展.

Mysql相关问答推荐

S在我的SQL代码中的外键出了什么问题?

获取最大登录应用程序用户数以及何时

Group_CONCAT CASE 乘法输出

SQL查询连接到多个类别的项目

如何确保 SQL 记录的列不引用它自己的主键?

MySQL如何在触发器内部 Select 多行然后插入它们

MySQL 8.0 可以在 Select 语句中返回 JSON 对象数组吗?

计算MySQL中的连续出现

java.lang.NullPointerException:无法调用com.proj.my.repository.OrderRepository.save(Object),因为this.orderRepository为空

如何在 MySQL 中使用从 SELECT IF 返回的布尔值

Mysql JSON_REMOVE 数组键和值 (MariaDB)

MySql,如何从列中替换某种格式的字符串

总行大小不超过 65535,但我得到行大小太大.所用表类型的最大行大小,不包括 BLOB,是 65535错误

如何使用 Raw SQl / Laravel 进行累积计数 - Eloquent ORM

在 MySQL 中 Select COUNT of MAX

MySQL Group By 和 Sum 其他列的总值

什么是全文索引,我应该什么时候使用它?

带有 OuterRef 的简单子查询

如何将 MySQL 查询结果存储在另一个表中?

获取最后一组不同的记录