Teradata를 사용하여 다음 작업을 수행하고 있습니다. 내가 다음 표Teradata 최적화 다중 테이블 조건부 조인 쿼리
col1 col2 col3 col4 col5
1 A NULL NULL D
2 B NULL NULL C
3 A B NULL D
4 A B C D
및 표 2
col1 col2 col3 col4
1 A D 27
2 B C 334
3 A B 434
4 B D 100
5 C D 200
은 내가이
col1 col2 col3 col4 col5 col_val_1 col_val_2 col_val_3
1 A NULL NULL D 27 NULL NULL
2 B NULL NULL C 334 NULL NULL
3 A B NULL D 434 100 NULL
4 A B C D 434 334 200
같은 테이블을 만들 수 있도록 표 1과 표 2 (3 회 예정) 가입하려는 말해봐
이 테이블을 다음 코드로 생성 할 수 있습니다.
select tab1.*, tab2_1.col4 as col_val_1, tab2_2.col4 as col_cal_2, tab2_3.col4 as col_val_3
from Table1 tab1
left outer join Table2 tab2_1
on tab2_1.col2 = tab1.col2
and tab2_1.col3 = coalesce(tab1.col3,tab1.col5) /* if col3 is Null then join on col5. I want to calculate pair wise value. If col3 is NULL, the pair is col2-col5.*/
left outer join Table2 tab2_2
on tab2_2.col2 = coalesce(tab1.col3,0)
and tab2_2.col3 = coalesce(tab1.col4, tab1.col5)
left outer join Table2 tab2_3
on tab2_3.col2 = coalesce(tab1.col4,0)
and tab2_3.col3 = tab1.col5
Table1 데이터는 col3이 null이면 col4가 null이 될 것입니다. col2와 col5는 결코 null이 아닙니다. 따라서 col3이 null이면 col2-col5를 갖습니다. col3가 null이 아니고 col4가 null이면 col2-col3, col3-col5를 갖습니다. 아무것도 null 인 경우 col2-col3, col3-col4, col4-col5가됩니다.
이 쿼리는 작은 테이블에 대해 실행되며 원하는 출력을 제공합니다. 그러나 이것은 복잡한 쿼리입니다. 이 경우 EXPLAIN
을 실행했으며 예상 런타임은 >10^5
시간입니다. 방법이 있는지 궁금 해서요. 이 쿼리는 최적화 될 수 있습니다.
'켜기'조항으로 달성하고자하는 바를 설명하기 위해 질문을 편집하십시오. 그것들을 단순화하면 성능이 크게 향상 될 것입니다. 특히, 'ON ... tab2_3.col2 = coalesce (tab1.col4,0)'의 목적은 신비합니다. –
MySQL 또는 Teradata를 사용하고 있습니까? –
조인에 대한 설명으로 질문을 업데이트했습니다. Table1 데이터는 col3이 null이면 col4가 null이 될 것입니다. col2와 col5는 결코 null이 아닙니다. 따라서 col3이 null이면 col2-col5를 갖습니다. col3가 null이 아니고 col4가 null이면 col2-col3, col3-col5를 갖습니다. 아무것도 null 인 경우 col2-col3, col3-col4, col4-col5가됩니다. – deepAgrawal