2013-10-30 3 views
2
Main Table : MT 
=============== 
PK, C1, C2 
========== 
1, X, X 
2, X, X 
3, X, X 
.......... 
100, X, X 


Table 1 :T1 
=============== 
PK, TC1 
======= 
2, D1 
3, D1 

Table 2: T2 
=============== 
PK, TC2 
======= 
3, D2 

Table 3: T3 
=============== 
PK, TC3 
======= 
4, D3 

Table 4: T4 
=============== 
PK, TC4 
======= 
2, D4 

는 좀 가입 한 후 마스터 테이블의 출력을 원하거나 어떤 방법으로 아래 : 나는 병합 5 테이블 데이터는

select * from 
MT inner join T1 on MT.PK=T1.PK 
inner join T2 on MT.PK = T2.PK 
inner join T2 on MT.PK = T3.PK 
inner join T2 on MT.PK = T4.PK 

을 시도하지만 몇 가지를 얻고있다

Master Table 
=============== 
PK,C1,C2,TC1,TC2,TC3,TC4 
======================== 
(1,X,X,null,null,null,null) 
(2,X,X,D1,null,null,D4) 
(3,X,X,D1,D2,null,null) 
(4,X,X,null,null,D3,null) 

중복 행. 아직도 중복되는 것을 구별 해 보았습니다. 이 일을 성취하려면 다른 대안이 있어야한다고 생각합니다.

+0

당신이 질문에 가지고있는 쿼리가 당신이 실행 한 것이라고 생각하지 않습니다 - 3 개의 조인이 같은 T2 테이블을 치고 있고 별칭이 T3 또는 T4가 아니므로 쿼리가 오류가 발생 했어야합니다. – dav1dsm1th

답변

2

기존 쿼리의 문제는 모든 테이블 사이에 INNER JOIN을 사용하고 있다는 것입니다. INNER JOIN은 조인중인 C 럼의 값이 두 테이블 모두에 있어야합니다.

당신이 대신 LEFT JOIN을 사용하려는 나에게 보인다

select MT.PK, MT.C1, MT.C2, T1.TC1, T2.TC2, T3.TC3, T4.TC4 
from MT 
left join T1 on MT.PK=T1.PK 
left join T2 on MT.PK = T2.PK 
left join T3 on MT.PK = T3.PK 
left join T4 on MT.PK = T4.PK; 

SQL Fiddle with Demo

왼쪽을 참조하십시오 다른 테이블의 경우에서 MT 테이블의 모든 행과 다음 데이터를 반환합니다 가입 PK이 일치 할 때 존재합니다.

+0

죄송합니다. 나는 노력했다. 하지만 여전히 중복 행을 얻는 중입니다. MT.PK 값을 포함하는 여러 행. MT의 각 행과 해당하는 다른 테이블 값을 원합니다. – sapatelbaps

+1

@sapatelbaps PK가 조인 된 테이블에 여러 번 존재하면 반환 할 테이블은 어느 것입니까? – Taryn

+0

sqlfiddle에서 공유되는 예제 u가 정확하며 문제가 해결되었습니다. @bluefeet – sapatelbaps