2013-07-13 1 views
1

일부 조건에 따라 조인 할 테이블을 변경하는 방법은 무엇입니까?조건을 기반으로 조인 할 테이블을 변경하는 방법

나는 Master 테이블과 2 개의 하위 테이블, Child1, Child2을 가지고 있습니다. ChildType 필드가 있습니다.

하위 유형을 기준으로 하위 테이블을 마스터 테이블에 조인해야합니다. 결과적으로 MasterIDChildName이 필요합니다.

다음은 내가 UNION을 사용하지 않고이 쿼리를 작성하려는 UNION

select m.MasterID, c1.ChildName from Master 
inner join Child1 c1 on c1.MasterId = m.MasterId 
UNION 
select m.MasterID, c2.ChildName from Master 
inner join Child1 c2 on c2.MasterId = m.MasterId 

사용하고 외부 조인을 사용하여 쿼리입니다. 이유, 둘 다 자식 및 실제 쿼리에서 마스터 여러 테이블에서오고, 나는 반복을 피하기 위해. 그들이이 같은 아마 뭔가, 상호 배타적 인 경우

답변

1

는 : 그렇지 않으면

SELECT m.MasterID 
     ,CASE WHEN c1.ChildName IS NULL THEN c2.ChildName ELSE c1.ChildName END AS ChildName 
    FROM Master m 
    LEFT JOIN Child1 c1 on (c1.MasterId = m.MasterId) 
    LEFT JOIN Child1 c2 on (c2.MasterId = m.MasterId) 

, 경우에 ChildType 필드를 사용합니다.

0

여기

SELECT m.MasterId, COALESCE(c1.ChildName, c2.ChildName) ChildName 
    FROM Master m LEFT JOIN Child1 c1 
    ON m.MasterId = c1.MasterId 
    AND m.ChildType = 1 LEFT JOIN Child2 c2 
    ON m.MasterId = c2.MasterId 
    AND m.ChildType = 2 

이 시도 SQLFiddle 데모