2017-06-21 69 views
1

我有一個龐大的數據的一些表,所以我嘗試使用該數據來創建一種報告的基礎上,使用`LEFT JOIN」一些條件,無法選擇數據連接表

SELECT SUBSIDIARY, MAIN_ACCOUNT, AMOUNT ... FROM (
... 
LEFT JOIN (SELECT MAIN_ACCOUNT, ACCOUNT_NO AS SUBSIDIARY FROM TABLE1 WHERE STATUS = 'A') K 
ON MAIN_ACCOUNT = K.MAIN_ACCOUNT 
LEFT JOIN (SELECT SUM(AMOUNT) AS AMOUNT, ACCOUNT_NO, FROM TABLE2 WHERE ACCOUNT_NO = K.ACCOUNT_NO GROUP_BY ACCOUNT_NO) L 
ON SUBSIDIARY = L.ACCOUNT_NO --this is where i got into a problem 
... 
); 

問題是我不能訪問K.ACCOUNT_NO從另一個我已經嘗試使用WHERE ACCOUNT_NO = SUBSIDIARY加入,因爲我選擇在主SELECT。這是否意味着我無法從另一個連接訪問先前查詢的數據?

錯誤,我得到:

ORA-00904: "SUBSIDIARY": invalid identifier 

如果我使用k.subsidiaryk.account_no

ORA-00904: "k.SUBSIDIARY": invalid identifier 
ORA-00904: "k.account_no": invalid identifier 
+0

@GurwinderSingh更新錯誤信息 – Hatik

+0

你的問題不能得到有效的回答是,因爲你有你選擇曖昧列。在你的第一個LEFT JOIN中,你說'ON MAIN_ACCOUNT = K.MAIN_ACCOUNT'。那第一個指哪來的?回顧並完全符合您選擇的所有字段。這個過程可能實際上幫助你找到問題所在。如果沒有,請編輯您的帖子以顯示結果,這將有助於澄清問題所在。 – SandPiper

+0

@SandPiper首先'MAIN_ACCOUNT'來自其他表,因爲它會帶來更多的困惑,所以我沒有把它包括在內,我認爲它不是重要的來自 – Hatik

回答

1

您不能訪問K.ACCOUNT_NO但你可以用INNER JOINTABLE1

WHERE ACCOUNT_NO = K.ACCOUNT_NO 

被替換

INNER JOIN TABLE1 ON TABLE2.ACCOUNT_NO = TABLE1.ACCOUNT_NO AND TABLE1.STATUS = 'A' 

我希望這是有幫助的。

SELECT SUBSIDIARY, MAIN_ACCOUNT, AMOUNT ... FROM (
    ... 
    LEFT JOIN (SELECT MAIN_ACCOUNT, ACCOUNT_NO AS SUBSIDIARY FROM TABLE1 WHERE STATUS = 'A') K 
    ON MAIN_ACCOUNT = K.MAIN_ACCOUNT 
    --this is where i got into a problem 
    LEFT JOIN (SELECT SUM(AMOUNT) AS AMOUNT, ACCOUNT_NO, FROM TABLE2 INNER JOIN TABLE1 ON TABLE2.ACCOUNT_NO = TABLE1.ACCOUNT_NO AND TABLE1.STATUS = 'A' GROUP BY ACCOUNT_NO) L 
    ON SUBSIDIARY = L.ACCOUNT_NO 
    ... 
    );