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

相同输出(与另一顺序)