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 
    ... 
    );