2016-10-03 3 views

Antwort

0

Sie können NOT EXISTS verwenden, um die nicht übereinstimmende ID aus beiden Tabellen herauszufinden und sie durch zu kombinieren.

Abfrage

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

Ein anderer Weg, mit TOP 1 WITH TIES und COUNT OVER:

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) 

Ausgang:

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

COUNT(*) OVER (PARTITION BY Id ORDER BY Id) Gibt 1 in eindeutige Zeile und >1, wenn es doppelte Id s gibt. Wenn Sie das auf ORDER BY setzen und TOP 1 WITH TIES hinzufügen, bleibt nur Id s mit minimaler Anzahl übrig.

Ein anderer Weg, mit 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 

gleichen Ausgang (mit einer anderen Reihenfolge)