2016-10-03 15 views

答えて

0

NOT EXISTSを使用して、両方のテーブルから一致しないIDを確認し、UNION ALLで組み合わせることができます。

クエリ

SELECT t1.[Id] FROM [table-1] t1 
WHERE NOT EXISTS(
    SELECT 1 FROM [table-2] t2 
    WHERE t1.[Id] = t2.[Id] 
) 
UNION ALL 
SELECT t2.[Id] FROM [table-2] t2 
WHERE NOT EXISTS(
    SELECT 1 FROM [table-1] t1 
    WHERE t1.[Id] = t2.[Id] 
); 

Demo for reference

0

TIES WITH TOP 1でのもう一つの方法とOVER COUNT:

SELECT TOP 1 WITH TIES * 
FROM (
    SELECT * 
    FROM [table-1] 
    UNION ALL 
    SELECT * 
    FROM [table-2] 
) u 
ORDER BY COUNT(*) OVER (PARTITION BY Id ORDER BY Id) 

出力:

Id name 
D ... 
E ... 
F ... 
G ... 
H ... 
I ... 
J ... 
K ... 

COUNT(*) OVER (PARTITION BY Id ORDER BY Id)Idが重複する場合は、1を一意の行に、>1を与えます。それをORDER BYに入れてTOP 1 WITH TIESを追加すると、最小カウントでIdしか残らなくなります。

FULL OUTERを持つもう一つの方法は、JOIN:

SELECT COALESCE(Id1,Id2) Id, 
     COALESCE(name1,name2) name 
FROM (
    SELECT t1.Id Id1, 
      t1.[name] name1, 
      t2.Id Id2, 
      t2.[name] name2 
    FROM [table-1] t1 
    FULL OUTER JOIN [table-2] t2 
     ON t1.Id = t2.Id 
    WHERE t1.Id IS NULL OR t2.ID IS NULL 
) as t 

同じ出力を(別の順序で)