使用USING子句JOIN时,如何避免ORA-25154实现OUTER APPLY关联?
解决ORA-25154错误的方法(不修改USING子句)
完全可以不用修改USING子句,只需调整OUTER APPLY子查询的写法即可解决问题,具体操作如下:
- 给TDM_CONFIG表起一个别名(比如
c),明确子查询内的FORM_ID属于该表 - 子查询的WHERE条件里,直接用不带表限定符的
FORM_ID匹配主查询中USING合并后的公共列
修改后的完整SQL代码:
SELECT * FROM TDM_FORMS JOIN TDM_ATTRIBUTES USING (FORM_ID) OUTER APPLY ( SELECT COUNT(c.OP_CODE) OPCNT, LISTAGG(c.OP_CODE) WITHIN GROUP (ORDER BY c.OP_CODE) OPLST FROM TDM_CONFIG c WHERE c.FORM_ID = FORM_ID -- 此处FORM_ID是主查询USING后的公共列,无需加表限定 )
原理说明
使用USING(FORM_ID)连接后,FORM_ID会成为主查询结果集中的公共列,不再隶属于某一张表,因此不能给它添加表限定符(比如TDM_FORMS.FORM_ID)。而子查询里的c.FORM_ID明确指向TDM_CONFIG表的列,和主查询的公共列FORM_ID做匹配,既避免了列名歧义,又符合Oracle的语法规则,自然不会触发ORA-25154错误。
内容的提问来源于stack exchange,提问作者Felipe Vidal
相关产品推荐
相关产品推荐

