【发布时间】:2016-07-12 16:24:22
【问题描述】:
我有两张桌子:
-
Table_A= 存储结果 -
Table_B= 用于聚合函数
Table_A 和 Table_B 共享两个名为 ID 和 CYCLE 的列,但 Table_B 包含多次出现的 CYCLE。我想计算CYCLE 在Table_B 中出现的次数并将它们存储在Table_A 中。例如,如果CYCLE = 42 我们有 20 行具有相同的值,我想计算它(即 20)并将其存储在CYCLE 下的Table_A 中,因为CYCLE 将具有相同的值(42) 但是Table_A 中的COUNT 列中的CYCLE 将包含20。这是我到目前为止所拥有的:
UPDATE database.Table_A
SET count =
(
SELECT ID, CYCLE,
COUNT(*) FROM database.Table_2
GROUP BY ID, CYCLE
)
WHERE database.Table_1.ID = database.Table_2.ID AND
database.Table_1.CYCLE = database.Table_2.CYCLE
我不断收到Error Code: 1241. Operand should contain 1 column(s)
对我的查询有什么建议吗?
编辑 1
SELECT 语句返回两列。这就是导致Error Code: 1241 的原因,但现在解决了,我得到Error Code: 1054. Unknown column 'database.Table_2.CYCLE' in 'where clause'。
【问题讨论】:
-
@Drew 感谢您指出这一点。我了解
SELECT语句的问题出在哪里,并已编辑我的问题以反映这一点。现在我面临Unknown column...- 错误1054。 -
您不能使用另一个表中的数据更新一个表,您需要使用 JOIN 来更新。
database.Table_2.CYCLE = database.Table_2.CYCLE是什么?你的意思是database.Table_1.CYCLE = database.Table_2.CYCLE吗?我假设你的意思是 mysql 的问题 -
@AbhikChakraborty 是的,我也更新了。您是否建议在
UPDATE语句之后使用INNER JOIN? -
不确定 Table_1 和 Table_2 来自哪里,但是假设表名如问题的第一部分所示,即
Table_A和Table_B这个查询应该可以工作update Table_A a join ( SELECT ID, CYCLE, COUNT(*) as cnt FROM Table_B GROUP BY ID, CYCLE )b on b.ID = a.ID and b.CYCLE = a.CYCLE set a.count` = b .cnt;`