2016-05-24 34 views
0

私はSQLの初心者です。私は2つのテーブルを持っています。各テーブルには主キー列(ID)と整数値を持つ他のいくつかの列があります。例えば主キーに2つのテーブルを追加/マージする方法は?

: - すべてのりんご、バナナやトマトをIDごとに追加されるような方法で

enter image description here

enter image description here

今、私は1つのテーブルに両方のテーブルをマージしたいです。例えば

enter image description here

SQL文は、このタスクのようになりますどのように?

答えて

3

はそれをテストする時間がないが、私はBY UNIONとGROUPを使用します。それが動作する場合

SELECT ID, 
    SUM(APPLES) AS APPLES, 
    SUM(BANANAS) AS BANANAS, 
    SUM(TOMATOES) AS TOMATOES 
FROM 
    (SELECT * FROM TABLEA 
       UNION ALL 
    SELECT * FROM TABLEB) AS ALL 
GROUP BY ID 

、これは最初にテーブルにすべてのエントリを追加し、それらを同じIDで結合します。問題があれば誰でも自由に編集できます。

あなたは第三のテーブルを望んで見ていない、あなたは、列の別名は必要ありません。

INSERT INTO 
    TABLEC 
VALUES 
    (ID, APPLES, BANANAS, TOMATOES) 
SELECT ID, 
    SUM(APPLES), 
    SUM(BANANAS), 
    SUM(TOMATOES) 
FROM 
    (SELECT * FROM TABLEA 
       UNION ALL 
    SELECT * FROM TABLEB) AS ALL 
GROUP BY ID 

問題が解決しない場合は、JOINの答えのいずれかを実行することができますが、変更しますそれはTABLEA USING(ID)へのTABLEA JOIN TABLEBへ。

5
INSERT INTO NEWTABLE (ID, Apples, Bananas, Tomatoes) 
    SELECT ISNULL(a.Id, b.Id) as [Id], 
      ISNULL(a.Apples,0) + ISNULL(b.Apples,0) AS [Apples], 
      ISNULL(a.Bananas,0) + ISNULL(b.Bananas,0) AS [Bananas], 
      ISNULL(a.Tomatoes,0) + ISNULL(b.Tomatoes,0) AS [Tomatoes] 
    FROM Table1 AS a 
    FULL OUTER JOIN Table2 AS b on b.Id = a.Id 

これはあなたの問題を解決すると思います。ただINSERTSELECTを組み合わせたものです。

+1

私がこれに追加する唯一のことは、彼の例ではすべてのIDが両方のテーブルにあるわけではないので、おそらく '完全外部結合 'である必要があるということです。このため、おそらく 'null + 5 'のようなものを避けるためにisnull()を追加する必要があります。 – SQLChao

+0

ありがとう@SQLChao、私はそれを逃した。列を個別に編集してラップします。 –

0

は、最善のアプローチは、そうでないあなたには、いくつかのIDを見逃す可能性、完全外部結合を使用することです。この

insert into tableC (ID, Apples, Bananas, Tomatoes) 
select tableA.ID, 
     ISNULL(tableA.Apples,0) + ISNULL(tableB.Apples,0) as Apples, 
     ISNULL(tableA.Bananas,0) + ISNULL(tableB.Bananas,0) as Bananas, 
     ISNULL(tableA.Tomatoes,0) + ISNULL(tableB.Tomatoes,0) as Tomatoes 
from tableA left join tableB 
on tableA.ID = tableB.ID; 
1

を試してみてください。あなたの例では、左の結合であなたはID = 4を見逃してしまいます。右の結合でID = 2を見逃します。

IDがあれば注意してください。存在すればTable1から、それ以外の場合はTable2から

だから私が考える最善の解決策は、このようなものです:

INSERT INTO Table3 (ID, Apples, Bananas, Tomatoes) 
SELECT coalesce (a.Id, b.Id) 
coalesce(a.Apples, 0) + coalesce(b.Apples, 0) AS Apples, 
coalesce(a.Bananas, 0) + coalesce(b.Bananas, 0) AS Bananas, 
coalesce(a.Tomatoes, 0) + coalesce(b.Tomatoes, 0) AS Tomatoes, 
FROM Table1 a 
FULL OUTER JOIN Table2 b on b.Id = a.Id