【问题标题】:How to Update using a Co-Related subquery?如何使用相关子查询进行更新?
【发布时间】:2015-01-02 08:04:57
【问题描述】:

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

所以我有两张桌子。表1和表2。
table1 中的 VALUE1 是我要设置的。
计算为VALUE1 = Apples(VALUE2)-Oranges(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;

【问题讨论】:

  • 尝试在子查询中给 TABLE2 取一个别名并将其用作 ID

标签: mysql sql subquery


【解决方案1】:

使用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

【讨论】:

  • 在大量行的情况下,JOIN 在内存上的成本不会更高吗?只是好奇?
  • 不,本质上是一样的。它应该首先使用WHERE 子句过滤table1,然后只加入匹配的行。
  • 我想你的意思是苹果 - 橘子
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多