私はSQLの初心者です。私は2つのテーブルを持っています。各テーブルには主キー列(ID
)と整数値を持つ他のいくつかの列があります。例えば主キーに2つのテーブルを追加/マージする方法は?
: - すべてのりんご、バナナやトマトをIDごとに追加されるような方法で
今、私は1つのテーブルに両方のテーブルをマージしたいです。例えば
:
SQL文は、このタスクのようになりますどのように?
私はSQLの初心者です。私は2つのテーブルを持っています。各テーブルには主キー列(ID
)と整数値を持つ他のいくつかの列があります。例えば主キーに2つのテーブルを追加/マージする方法は?
: - すべてのりんご、バナナやトマトをIDごとに追加されるような方法で
今、私は1つのテーブルに両方のテーブルをマージしたいです。例えば
:
SQL文は、このタスクのようになりますどのように?
はそれをテストする時間がないが、私は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へ。
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
これはあなたの問題を解決すると思います。ただINSERT
とSELECT
を組み合わせたものです。
は、最善のアプローチは、そうでないあなたには、いくつかの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;
を試してみてください。あなたの例では、左の結合であなたは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
私がこれに追加する唯一のことは、彼の例ではすべてのIDが両方のテーブルにあるわけではないので、おそらく '完全外部結合 'である必要があるということです。このため、おそらく 'null + 5 'のようなものを避けるためにisnull()を追加する必要があります。 – SQLChao
ありがとう@SQLChao、私はそれを逃した。列を個別に編集してラップします。 –