我正在使用Teradata執行以下操作。 說我有以下表1優化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
我想加入表1和表2(將3次),這樣我可以創建這樣
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
表
我可以用下面的代碼創建這個表格
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爲空,col4將爲空。 col2和col5不會爲空。所以如果col3爲空,我會有col2-col5。如果col3不爲null,col4爲null,那麼我將有col2-col3,col3-col5。如果什麼都不是null,那麼我將有col2-col3,col3-col4,col4-col5。
此查詢爲小表運行,並提供所需的輸出。但是,這是一個複雜的查詢。我在此上運行EXPLAIN
,預計運行時間爲>10^5
小時。我想知道是否有辦法。這個查詢可以被優化。
請編輯你的問題,解釋你希望用你的'ON'子句完成的事情。簡化它們可能會對性能有很大的幫助。特別是'ON ... tab2_3.col2 = coalesce(tab1.col4,0)'的目的是神祕的。 –
您使用的是MySQL還是Teradata? –
我已經用連接的解釋更新了這個問題。 Table1數據是這樣的,如果col3爲null,col4將爲null。 col2和col5不會爲空。所以如果col3爲空,我會有col2-col5。如果col3不爲null,col4爲null,那麼我將有col2-col3,col3-col5。如果什麼都不是null,那麼我將有col2-col3,col3-col4,col4-col5。 – deepAgrawal