2016-10-03 3 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 또 다른 방법과 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이 중복되면 1을 고유 행에, >1을 제공합니다. 이를 ORDER BY에 넣고 TOP 1 WITH TIES를 추가하면 최소 카운트로 Id만을 남깁니다.

FULL OUTER 또 다른 방법은 가입 :

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 

같은 출력을 (다른 주문)