2016-12-15 1 views
2

3 열 키 스택을 기반으로 두 테이블을 결합해야합니다. 문제는 때로 키 열 중 하나가 다른 테이블에서 다르게 변환되고 매핑되는 경우입니다. 내가 코드를 사용하여 예를 들어 내 문제를 시도합니다 :존재하는 경우 조건부 결합

select t1.TQ 
    from table1 t1 
    left join table2 t2 on t1.comp_cd = t2.comp_cd and t1.plcy_frm = t2.plcy_frm 
          and t1.val_cd = t2.val_cd 

열 "comp_cd"와 "plcy_frm는"좋은, 그러나 문제는 val_cd 함께. 경우에 따라 table2의 val_cd가 table1에 올바르게 매핑되지 않고 세 번째 테이블 인 table3을 통과해야합니다. 표 3의 구조는 다음과 같습니다 :

Val_Cd  Mapped_Val_Cd 
A123   A564 

그래서 -> 나는 Table3에 존재하는 경우 Mapped_Val_Cd 값에 가입하지만, Val_CdTable3에 존재하지 않는 경우 Table2에서 Val_Cd에 가입해야합니다.

나는 이것이 의미가 있기를 바란다. 나는 문법이 존재할 때 그것을 시도했지만 그 것을 작동시키지 못한다. table3에 중복이 없는지 가정

+0

샘플 데이터와 원하는 결과가 정말 당신이 원하는 것을 명확히 도움이 될를 . –

+0

샘플 데이터와 원하는 결과를 제공해 주시면 기쁩니다. 내가 여기서 테이블 형식을 어떻게 잡을 수 있는지 아십니까? 나는 Stack OverFlow를 처음 사용한다. –

+0

코드와 동일한 방식으로 데이터 서식을 지정할 수 있습니다. 가장 간단한 방법은 각 행을 4 개의 공백으로 미리 보류하는 것입니다. 또 다른 방법은 코드를 강조 표시하고 입력 상자 바로 위의 '{}'아이콘을 클릭하는 것입니다. –

답변

1

, 당신은 그것을 left join 다음은 on 절에 원하는 값을 선택할 수 있습니다

select t1.TQ 
from table1 t1 left join 
    table3 t3 
    on t1.val_cd = t3.val_cd 
    table2 t2 
    on t1.comp_cd = t2.comp_cd and 
     t1.plcy_frm = t2.plcy_frm and 
     t1.val_cd = coalesce(t3.Mapped_Val_Cd, t2.val_cd); 
+0

사실 -이 코드는 내가 찾고있는 코드와 정확히 일치합니다. 빠르고 정확한 솔루션에 대한 많은 감사를드립니다! –