2016-10-03 77 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

的另一種方法與TOP 1 WITH TIES和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) 

輸出:

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

COUNT(*) OVER (PARTITION BY Id ORDER BY Id)如果有重複的Id s,則將1設置爲唯一行,並且>1。如果你把它放在ORDER BY中,並且添加TOP 1 WITH TIES - 那隻剩下Id s,並且計數最小。

與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 

相同輸出(與另一順序)