ORA-00904错误排查:子查询中无法识别t.Borrower_Balance字段
问题分析与解决
错误原因
你遇到的ORA-00904: "T"."BORROWER_BALANCE": invalid identifier错误,核心原因是外层查询试图引用的t.Borrower_Balance字段,并未出现在内层子查询的返回结果中。
内层子查询(FROM后的括号内查询)相当于一张临时表,外层只能访问这张临时表明确列出的字段。你的内层子查询SELECT列表仅包含p.person_id、p.SSN和Code_Acme_I5,完全没包含t.Borrower_Balance,所以外层自然找不到这个字段。
修正方案
需要把t.Borrower_Balance添加到内层子查询的SELECT列表中。由于内层使用了GROUP BY,且t.brwr_person_id与p.person_id关联,每个person_id对应唯一的Borrower_Balance值,直接将其加入SELECT即可,同时要同步加到GROUP BY子句(Oracle要求非聚合字段必须在GROUP BY中声明)。
修正后的SQL代码
SELECT person_id, SSN, Code_Acme_I5, Borrower_Balance FROM ( SELECT p.person_id ,p.SSN ,MAX(CASE WHEN ld.loan_holder_cd IN ('500','512') THEN ld.loan_holder_cd END) AS Code_Acme_I5 ,t.Borrower_Balance -- 新增:将t表的Borrower_Balance加入内层查询返回字段 FROM nslds_prd.loan@idr l INNER JOIN nslds_prd.loan_dtl@idr ld ON l.loan_id = ld.loan_id INNER JOIN nslds_prd.person@idr p ON ld.brwr_person_id = p.person_id JOIN ( SELECT l.brwr_person_id, SUM(l.opb_amt + l.oib_amt) AS Borrower_Balance FROM nslds_prd.loan_dtl@idr l GROUP BY l.brwr_person_id ) t on t.brwr_person_id = p.person_id WHERE p.person_id = 3691451 GROUP BY p.person_id ,p.SSN ,t.Borrower_Balance -- 新增:GROUP BY中加入该字段,符合Oracle语法要求 )
内容的提问来源于stack exchange,提问作者evanburen
相关产品推荐
相关产品推荐

