【发布时间】:2015-04-25 21:08:57
【问题描述】:
我有一个子查询中包含子查询的查询。内部子查询与外部查询的结果相关:
SELECT
employees.ENAME,
employees.DEPTNO,
(
SELECT * FROM
(SELECT DNAME FROM DEPT WHERE DEPT.DEPTNO = employees.DEPTNO)
) DNAME
FROM EMP employees
;
对于 Oracle 10.2.0.1.0 可以正常工作,但是 Oracle 11.2.0.4.0 会抛出错误:
ORA-00904: "EMPLOYEES"."DEPTNO": 无效标识符"
如果我删除中间的查询,它也适用于 Oracle 11。所以我认为这是标识符可见性的问题。
上面的代码是对我的问题的简化。由于某种原因,我无法通过另一个联接解决问题,也无法使用存储过程或辅助视图。如何使此代码在单个查询中与 Oracle 11 一起使用?
【问题讨论】:
-
请提供确切的数据库版本。
-
12.1.0.2不是问题 -
根据@LalitKumarB 的回答,最好的解决方案是联系Oracle 支持或应用最新的11g 补丁集。
-
您显示的内容在 10.2.0.5 中也不起作用,可能是因为提到了向后移植 ibre5041。您不能引用一个标识符(在这种情况下是您的员工别名)超过一级子查询。如果没有看到更现实、更简单的示例以及您正在使用的限制,很难说如何解决它 - 为什么您不能加入,为什么您有额外级别的子查询,这在示例中是多余的,是否你可以使用 CTE...
-
在问题中添加了 Oracle 版本
标签: sql oracle11g oracle10g ora-00904