大家好日子..!: - )
我有这个表tab
,其中totalUsed
等于used
引用的所有name
值的总和
cid name used total
1 a 1 1
2 a 3 4
3 a 6 10
4 b 3 3
5 b 7 10
6 b 10 0
7 a 5 0
我有这段代码,但它只复制了totalUsed的相邻used
值
UPDATE tab
SET totalUsed=
(
SELECT SUM(used)
)
cid name used total
1 a 1 1
2 a 3 3
3 a 6 6
4 b 3 3
5 b 7 7
6 b 10 10
7 a 5 5
如果used
6的cid
设置为10,则totalUsed
应为20
对于cid
7,它应该是15。
如何在mysql中做到这一点?
它应该是这样的。
cid name used total
1 a 1 1
2 a 3 4
3 a 6 10
4 b 3 3
5 b 7 10
6 b 10 20
7 a 5 15
感谢您的帮助 : - )
答案 0 :(得分:0)
在SQL的大多数方言中,您可以使用带有相关子查询的update
来执行此操作:
UPDATE tab
SET totalUsed = (SELECT SUM(used)
from tab tab2
where tab2.name = tab.name and
tab2.cid <= tab.cid
);
编辑:
以上内容在MySQL中不起作用。你可以这样做:
UPDATE tab join
(select tab2.cid,
(SELECT SUM(used)
from tab tab3
where tab3.name = tab2.name and
tab3.cid <= tab2.cid
) as cum_used
from tab tab2
) tab2
on tab.cid = tab2.cid
SET tab.totalUsed = tab2.cum_used;