我正在oracle 10g中执行sql查询。
我想将3个表连接到一个包含3个单独表中所有记录的新表中。余数应该在3个表之间重复reg_id的任何地方进行求和,这样每个reg_id只有一个条目,并且我的新表中的总和余额。
示例数据(类似的表,具有不同的值)。表:temp1,temp2,temp3
reg_id | balance
--------------------------------
92603013 183.77
92611902 419.46
92766121 77.04
93527720 24.84
93581368 120.09
93684684 89.88
93527720 113.66
感谢有人可以帮我解释语法。
答案 0 :(得分:4)
尝试以下方法......
INSERT INTO target_table (reg_id, balance)
SELECT reg_id, sum(balance) as balance
FROM (select reg_id, balance from temp1
UNION ALL
select reg_id, balance from temp2
UNION ALL
select reg_id, balance from temp3)
GROUP BY reg_id;
我没有尝试过,所以不知道语法是否正确以及它是否会严重破坏你的数据。 :)
编辑:将UNION更改为UNION ALL。谢谢,APC!
编辑2:根据Tony的建议明确指定列。
答案 1 :(得分:1)
我建议:
SELECT coalesce(t1.reg_id, t2.reg_id, t3.reg_id) AS the_reg_id,
coalesce(t1.balance, 0.0) +
coalesce(t2.balance, 0.0) +
coalesce(t3.balance, 0.0) AS the_balance
FROM t1 FULL OUTER JOIN t2 ON (t1.reg_id = t2.reg_id)
FULL OUTER JOIN t3 ON (t1.reg_id = t3.reg_id)