mysql - 如何使用相关子查询进行更新?

标签 mysql sql subquery

注意:这不是家庭作业。我已将我的情况简化为通用表格。

所以我有两张 table 。表1、表2。
table1中的VALUE1是我要设置的。
计算公式为VALUE1 = 苹果(VALUE2)-橙子(VALUE3)

TABLE1
ID          INT //PRIMARY KEY
VALUE1      INT
VALUE2      INT //FOREIGN KEY TO TABLE2
VALUE3      INT //FOREIGN KEY TO TABLE2

.

TABLE2
ID          INT //PRIMARY KEY
APPLES      INT
ORANGES     INT

.

这让我想到了这个问题。如何使用关联子查询进行更新?

这是我尝试过的,
它执行时没有错误,但值保持不变。我觉得很奇怪。

UPDATE TABLE1 AS X 
SET VALUE1= 
(SELECT APPLES FROM TABLE2 WHERE ID = X.VALUE2)
-
(SELECT ORANGES FROM TABLE2 WHERE ID = X.VALUE3) 
WHERE X.ID=12;

最佳答案

使用JOIN代替相关子查询:

UPDATE TABLE1 AS x
JOIN TABLE2 AS y1 ON y1.id = x.value2
JOIN TABLE2 AS y2 ON y2.id = x.value3
SET value1 = y1.apples = y2.oranges
WHERE x.id = 12

关于mysql - 如何使用相关子查询进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27739187/

相关文章:

MySQL - 删除未使用的行

sql - 公共(public)架构未在安全定义器函数的搜索路径中定义,但仍可访问

sql - 最喜欢的性能调优技巧

mysql - 在 from 子句中加入嵌套查询

mysql - 无法使用 group by 和 not in 检索数据,MySql

mysql - SQL 查询连接(创建来自不同表的组合总和的 View )

javascript - 使用 ajax 返回 mysql_num_rows

mysql - Laravel 5 和远程 mysql 无法在生产环境中运行

sql - 找出每天自行车的首次行程持续时间和最后一次行程持续时间

php - 根据用户输入在 Laravel 中创建新表?