2014-12-17 3 views
1

총 4 개의 테이블이 있습니다. 아래의 데이터는 더미 데이터이지만 구조는 원래의 db와 동일합니다.MySQL에서 왼쪽 조인을 사용하여 3 개의 테이블 조인

Table -- ms1 Table -- ms2   Table -- ms3 

msoneid   mstwoid    msthreeid 
3    11     79 
4    12     83 
5    14     84 
6    17     85 

Master table -- ms 

rid    hid     tie 
11     3      33 
11     5      44 
12     12     55 
12     84     66 
13     79     77 
13     17     88 

내가 원하는 것은

hid   tie 
3    33 
4    0 
5    44 
6    0 
11   0 
12   55 
14   0 
17   88 
79   77 
83   0 
84   66 
85   0 

내 쿼리는

select * from ms where rid in (11,12,13)이며,이 날은 joined.I과 함께 시도하지 있기 때문에 분명히 다른 3 개 테이블에있는 다른 결석 ID를 제공하지 않습니다 왼쪽 가입하지만 나는 그것을 엉망으로 만들었습니다.

모든 도움말/힌트/예제는 대 환영합니다. 미리 감사드립니다.

답변

1

아마 통합 쿼리 여기 여기

SELECT ms1.msoneid as hid, ms.tie FROM ms1 LEFT JOIN ms ON ms1.msoneid=ms.hid WHERE ms.rid in(11,12,13) 
UNION 
SELECT ms2.mstwoid as hid, ms.tie FROM ms2 LEFT JOIN ms ON ms2.mstwoid=ms.hid WHERE ms.rid in(11,12,13) 
UNION 
SELECT ms3.msthreeid as hid, ms.tie FROM ms3 LEFT JOIN ms ON ms3.msthreeid=ms.hid WHERE ms.rid in(11,12,13) 

작업의 것 sql fiddle

레코드를 정렬하려면이 하위 쿼리 위 쿼리의 시리즈를 만들 수 있습니다. 난 당신이 무슨 뜻인지 얻을 수 있지만,이 도움이 될 경우하지 않도록

SELECT * FROM (
    SELECT ms1.msoneid as hid, ms.tie FROM ms1 LEFT JOIN ms ON ms1.msoneid=ms.hid WHERE ms.rid in(11,12,13) 
    UNION 
    SELECT ms2.mstwoid as hid, ms.tie FROM ms2 LEFT JOIN ms ON ms2.mstwoid=ms.hid WHERE ms.rid in(11,12,13) 
    UNION 
    SELECT ms3.msthreeid as hid, ms.tie FROM ms3 LEFT JOIN ms ON ms3.msthreeid=ms.hid WHERE ms.rid in(11,12,13) 
) as tempTbl 
ORDER BY tempTbl.hid; 
+0

감사합니다. 그것과 함께 시도하자. 또한 rids에 where 절을 사용해야한다. – Raj

+0

굉장합니다. 정말 고맙습니다. 각 선택 항목 내에서 뚜껑을 언급 할 수있는 방법이 있습니까? – Raj

+1

물론 각 쿼리에 대한 select에 ms.rid를 포함하십시오. 나는 쿼리를 업데이트했습니다. – Robbert

0
select  alias_master.* 
from  ms alias_master 
left join ms1 alias_ms1 on alias_master.rid = alias_ms1.msoneid 
left join ms2 alias_ms2 on alias_master.rid = alias_ms2.mstwoid 
left join ms3 alias_ms3 on alias_master.rid = alias_ms3.msthreeid 
where  ms.rid in(11,12,13) 

.

관련 문제