2017-04-06 68 views
0

我正在做一個查詢構建在配置單元中,查詢如下。在配置單元中進行左外連接時的日期過濾器

*

Select * from CSS407 
LEFT OUTER JOIN PROD_CORE.SERV_ACCT_ISVC_LINK SASP 
ON CSS407.TABLE_ABBRV_CODE = 'SACT' 
AND CSS407.EVENT_ITEM_REF_NUM = SASP.Serv_Acct_Id 
AND to_date(CSS407.EVENT_RTS_VAL) >= SASP.Acct_Serv_Pnt_Strt_Dt 
AND to_date(CSS407.EVENT_RTS_VAL) < SASP.Acct_Serv_Pnt_End_Dt 
LEFT OUTER JOIN PROD_CORE.CUST_ACCT_SA_LINK ASA 
ON CSS407.TABLE_ABBRV_CODE = 'SACT' 
AND CSS407.EVENT_ITEM_REF_NUM = ASA.Serv_Acct_Id 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASA.Acct_Relt_Strt_Dttm 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM < ASA.Acct_Relt_End_Dttm 
LEFT OUTER JOIN PROD_CORE.CUST_SA_LINK ASAT 
ON CSS407.TABLE_ABBRV_CODE = 'TACT' 
AND CSS407.EVENT_ITEM_REF_NUM = ASAT.Serv_Acct_Id 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM >= ASAT.Acct_Relt_Strt_Dttm 
AND CSS407.EVENT_RTS_VAL_UTC_DTTM < ASAT.Acct_Relt_End_Dttm 

*

當我執行上面的表中蜂巢我提示以下錯誤:

「左,右別名遇到JOIN 'SASP'」

在進一步的調查中,我創建了我們不能在加入條件過濾器之間使用日期。在每篇文章中,每個人都要求將該過濾器插入到哪裏。

但是在我們的情況下,如果我們將過濾器之間的日期移動到where條件,那麼由於左外連接並不令人滿意,所以我們沒有得到任何數據。

我得到這個問題,而在HIVE執行,它是在Teradata的做工精細和Oracle

請幫助。

+0

請分享真正的SELECT子句(它可能不是'Select *'),因爲可能有其他方法來解決它,然後使用多個LEFT JOIN –

+0

P.我假設你從每個連接表中獲得單個記錄? –

+0

你有連接表的主鍵嗎? –

回答

-1

CSS407和SERV_ACCT_ISVC_LINK之間可能存在一些共同的列,可能會導致此錯誤。

+0

不,因爲我們正在選擇*它不會產生任何問題,我們也提供了所有列的別名 –

0

只有等於(=)在Hive中的連接條件下工作。移動< =到where子句。

我以前有類似的問題。請檢查下面的線程。

Hive Select MAX() in Join Condition

希望這有助於。