我正在使用 Oracle 10g (XE 10.2.0.1.0),发现一个我不理解的行为:
select *
from employees manager
join employees worker on MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID
join departments on DEPARTMENTS.manager_id = 108
where
department_id = 100
;
问题是我认为 Oracle 应该抱怨department_id
where 子句中的歧义,因为它是 tableemployees
和departments
. 事实是在 Oracle 10g 中,它没有,结果表明它将 解释department_id
为departments
. 但是,如果我注释掉第二个连接语句(上面的第 4 行),Oracle 会按预期抱怨“ORA-00918:列不明确定义”。
那么,有人可以帮助解释一下 Oracle 10g 中的歧义是如何定义的吗?或者这可能是 10g 中的错误?
顺便说一句:这些表是在 Oracle 10g 中捆绑的默认 HR 模式中定义的。
更新:刚刚找到一个相关的帖子: 为什么 Oracle SQL 神秘地解决了一个连接中的歧义,而在其他连接中却没有