我有两个表,表A和表B看起来像这样:
表A的结构: id |名称| statistic1 | statistic2
表B的结构: id |名称|日期时间| round_info | statistic1 | statistic2
基本上,表B在许多不同的回合中记录statistic1和statistic2,因此将有许多具有相同名称的唯一条目,我希望表A是一个主列表,其中B中的每个名称都表示为A中的一行,其中A中的statistic1和statistic2分别是B中每个回合的statistic1和statistic2之和。
为此我需要的脚本应该从表B中获取每个名称,检查它是否在A中,如果不是,则插入具有该名称的默认行,然后使用表B数据更新它,如果是在A中,只需对其进行更新即可。
我有这段代码有一些缺点:
UPDATE A
INNER JOIN (SELECT B.name, sum(statistic1) as s1, sum(statistic2) as s2
FROM B
group by name) as t ON A.name = t.name
SET A.statistic1 = t.s1;
当B中的名称不在A中时,它不会在A中插入行,并且一次仅更新一个统计信息。
答案 0 :(得分:0)
您尝试过吗:
UPDATE A
SET A.statistic1 = (SELECT sum(B.statistic1)
FROM B
WHERE B.name = A.name
group by B.name )