我有两张桌子:
Table_A
=存储结果Table_B
=用于汇总功能 Table_A
和Table_B
共享两个名为ID
和CYCLE
的列,但Table_B
包含多次出现的CYCLE
。我想计算CYCLE
中Table_B
的出现次数并将其存储在Table_A
中。例如,如果CYCLE
= 42我们有20行具有相同的值,我想计算它(即20)并将其存储在Table_A
下CYCLE
以下CYCLE
1}}将具有相同的值(42),但COUNT
中Table_A
的{{1}}列将包含20.这是我到目前为止所拥有的:
CYCLE
我不断获得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
对我的查询有任何建议吗?
编辑1
Error Code: 1241. Operand should contain 1 column(s)
语句返回两列。导致SELECT
的原因是什么,但现在已经解决了,我得到了Error Code: 1241
。
答案 0 :(得分:1)
这是一个旧的剪切和粘贴,我有一个连接和聚合更新:
根据聚合对另一个表进行更新
create table tA
( id int auto_increment primary key,
theDate datetime not null,
-- other stuff
key(theDate) -- make it snappy fast
);
create table tB
( myId int primary key, -- but definition PK is not null
someCol int not null
);
-- truncate table tA;
-- truncate table tB;
insert tA(theDate) values
('2015-09-19'),
('2015-09-19 00:24:21'),
('2015-09-19 07:24:21'),
('2015-09-20 00:00:00');
insert tB(myId,someCol) values (15,-1); -- (-1) just for the heck of it
insert tB(myId,someCol) values (16,-1); -- (-1) just for the heck of it
update tB
set someCol=(select count(*) from tA where theDate between '2015-09-19 00:00:00' and '2015-09-19 00:59:59')
where tB.myId=15;
select * from tB;
+------+---------+
| myId | someCol |
+------+---------+
| 15 | 2 |
| 16 | -1 |
+------+---------+
仅触摸myId = 15。
如果它困扰我的同伴,我会高兴地删除它。事实上,我今天不能删除它,因为我用尽了所有的选票。