加入3个结构相似的表格

时间:2009-10-28 05:18:04

标签: sql oracle plsql oracle10g

我正在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

感谢有人可以帮我解释语法。

2 个答案:

答案 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)