テーブルのデータを比較して差分をとる結合

ウィリアン
2013-12-25 12:04 2090 2
TableAとTableBがあります。構造は同じです。
中身は下記のようだとします。
TableA      TableB
ID VALUE     ID VALUE
1 A       3 C
2 B       4 D
3 C       

差分結合結果を下記のようにとりたいのです。
1 A
2 B
4 D

良い方法をご存じでしたら、ご教授よろしくお願い致します。

コメント

2013年 12月 25日 (21:08)
こんにちは。
イノ(inno)です。

色々な方法がありますので、
いくつは紹介します。
まず、テストの為にテーブルとデータを作りましょう。


CREATE TABLE dbo.TempA
(
ID int
, VALUE varchar(10)
)

CREATE TABLE dbo.TempB
(
ID int
, VALUE varchar(10)
)

INSERT INTO dbo.TempA
SELECT 1, 'A' UNION ALL
SELECT 2, 'B' UNION ALL
SELECT 3, 'C'


INSERT INTO dbo.TempB
SELECT 3, 'C' UNION ALL
SELECT 4, 'D'


では、ここから質問内容にある実行結果と同じ結果が出るSQLを3つ紹介します。

1) GROUP BYを利用。

SELECT ID, VALUE FROM
(
SELECT * FROM dbo.TempA
UNION ALL
SELECT * FROM dbo.TempB
) A
GROUP BY ID, VALUE
HAVING COUNT(ID) = 1


2) EXCEPTを利用。

SELECT * FROM
(
SELECT * FROM dbo.TempA
EXCEPT
SELECT * FROM dbo.TempB
) A
UNION ALL
SELECT * FROM
(
SELECT * FROM dbo.TempB
EXCEPT
SELECT * FROM dbo.TempA
) B



3) LEFT OUTER JOIN を利用。

SELECT A.*
FROM dbo.TempA AS A
LEFT OUTER JOIN dbo.TempB AS B
ON A.ID = B.ID
WHERE B.ID IS NULL
UNION ALL
SELECT A.*
FROM dbo.TempB AS A
LEFT OUTER JOIN dbo.TempA AS B
ON A.ID = B.ID
WHERE B.ID IS NULL


どうですか?
一番効率的なものを選んで作業してください。
ウィリアン 2013年 12月 26日 (17:26)
イノさん、ありがとうございます。
色んな方法があるんですね。
試してみます。本当に助かりました。