如何将两个表合并为一个具有相同列的表?

8

我有两个表A和B。A有两列:id、amount。B也有两列:id、amount。 我希望将A和B合并成一个新表C,包含相同的两列:id、amount。请问如何使用SQL实现? 例如:

A
    ('A1',1)
    ('A2',5)
    ('A3',2)
    ('A4',5)
    ('A5',2)
    ('A6',7)
B
    ('A1',3)
    ('A3',2)
    ('A4',7)
    ('A5',4)
    ('A8',2)
    ('A9',10)

因此,C 应该是:

C
    ('A1',4)
    ('A2',5)
    ('A3',4)
    ('A4',12)
    ('A5',6)
    ('A6',7)
    ('A8',2)
    ('A9',10)
2个回答

11
SELECT  ID, SUM(Amount) total
FROM
        (
            SELECT ID, Amount FROM A
            UNION ALL
            SELECT ID, AMount FROM B
        ) s
GROUP   BY ID

您可以根据查询结果创建表格。

CREATE TABLE C
AS
SELECT  ID, SUM(Amount) total
FROM
        (
            SELECT ID, Amount FROM A
            UNION ALL
            SELECT ID, AMount FROM B
        ) s
GROUP   BY ID;

1
+1 你也可以添加 CREATE TABLE c LIKE a :),不过我不确定 Oracle 是否支持该功能。 - Ja͢ck
谢谢!另一个问题(抱歉我是 SQL 新手),如果 A 和 B 只是选择结果,我该怎么实现呢?我的意思是,A 不是真实的表格,我使用 SELECT FROM WHERE 获得 A... 我需要创建视图或其他东西吗? 谢谢! - lkkeepmoving
@lkkeepmoving 是的,你可以创建一个视图,但如果你不想这样做,也可以在子查询中使用该查询,例如 SELECT ID, Amount FROM (...在此添加查询...) newTB - John Woo
明白了。最后一个问题,如果我想按照数量降序创建 C,我该怎么做? - lkkeepmoving
只需添加“order by”子句即可,在此处查看 http://www.sqlfiddle.com/#!4/eeeff/1 左侧窗口的最后部分有一个“create table”语句。 - John Woo

-2

上面的回答完全没问题。只需要加一个按ID排序的order by子句即可。

SELECT  ID, SUM(Amount) as total
FROM
        (
            SELECT ID, Amount FROM A
            UNION ALL
            SELECT ID, AMount FROM B
        ) s
GROUP by ID
order by ID 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接