2014-02-17 3 views
0

분명히 나는 ​​SQL 사용자가 아니기 때문에 다음과 같은 간단한 작업에 도움을 요청해야합니다.조건부로 두 번째 SQL Server 테이블을 세 번째 테이블에 병합

많은 동일한 열과 키 열 (entry_ID)이있는 t1t2의 두 SQL Server 2008 테이블이 있습니다. T2에는 t1에 존재하지 않는 행이 있지만 있어야합니다.

나는 t1에 존재하지 않는 t2에서 해당 행을 병합 할하지만 난 이미 t1에 존재 t2에서 행을 원하지 않는다. 결과를 새로운 t3으로 채우고 싶습니다.

많은 솔루션을 온라인에서 살펴 보았지만 위의 시나리오에 대한 솔루션을 찾을 수 없습니다.

감사합니다.

+0

[this] (http://msdn.microsoft.com/en-us/library/bb510625.aspx) 시작하는 데 도움이됩니다. – abhi

답변

0

UNION ALL 또는 OUTER JOIN을 사용할 수있는 방법에는 여러 가지가 있습니다.

이 당신에게 당신의 레코드 가져옵니다 : T1 및 T2 병합 : 당신을 가정

동일한 기록을 찾기 위해 Entry_ID을 사용하고 Entry_ID 각 테이블 내에서 고유 여기에 OUTER JOIN 방법이다

SELECT 
CASE 
WHEN T1.Entry_ID IS NULL THEN 'T2' 
WHEN T2.Entry_ID IS NULL THEN 'T1' 
ELSE 'Both' 
END SourceTable, 
COALESCE(T1.Entry_ID,T2.Entry_ID) As Entry_ID, 
COALESCE(T1.Col1, T2.Col1) As Col1, 
COALESCE(T1.Col2, T2.Col2) As Col2, 
COALESCE(T1.Col3, T2.Col3) As Col3, 
COALESCE(T1.Col4, T2.Col4) As Col4 
FROM T1 FULL OUTER JOIN T2 
ON T1.Entry_DI = T2.Entry_ID 
ORDER BY COALESCE(T1.Entry_DI,T2.Entry_ID) 

이 T3에 삽입 :

다시
INSERT INTO T3 (Entry_ID,Col1, COl2,Col3,Col4) 
SELECT 
COALESCE(T1.Entry_DI,T2.Entry_ID) As Entry_ID, 
COALESCE(T1.Col1, T2.Col1) As Col1, 
COALESCE(T1.Col2, T2.Col2) As Col2, 
COALESCE(T1.Col3, T2.Col3) As Col3, 
COALESCE(T1.Col4, T2.Col4) As Col4 
FROM T1 FULL OUTER JOIN T2 
ON T1.Entry_DI = T2.Entry_ID 

당신이 Entry_ID 자신의 테이블 내에서 고유 할 필요가 있습니다해야하며이 t간에 일치하려면이 옵션을 사용하여 ables.

또한 insert 문에서 열리스트와 함께 선택 행의 열을 주목하십시오. 물리적 테이블의 열 순서는 중요하지 않습니다. INSERT와 SELECT는 줄을 서서 정렬해야합니다.

+0

예, Entry_ID는 두 테이블의 기본 키입니다. 화요일에 해결책을 사용하겠습니다. 귀하의 제안에 감사드립니다. – user2033850

+0

그러나 T1에서 Entry_ID = 4이고 T2에서 Entry_ID = 4는 이들이 동일한 레코드임을 나타 냅니까? 흔히 그렇지 않습니다. 레코드가 같은지 여부를 결정할 때 종종 다른 필드를 사용해야합니다. –

+0

좋은 지적. t2의 한 필드는 다르지만 그 차이는 유효합니다.하지만 Entry_ID가 두 테이블에서 동일하면 – user2033850

관련 문제