我使用Oracle 10g(XE 10.2.0.1.0),发现我不明白一个问题:为什么Oracle 10g不会抱怨列不明确?
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
;
的问题是,我认为甲骨文应该有抱怨的department_id
在不确定性where子句,因为它是表employees
和departments
中的一列。事实是在Oracle 10g中,事实并非如此,结果表明它将department_id
解释为departments
中的那个。但是,如果我注释掉第二条连接语句(上面的第四行),Oracle会按预期抱怨“ORA-00918:列含糊不清”。
那么,有人可以帮助解释Oracle 10g中如何定义歧义吗?或者这可能是10g中的一个错误?
顺便提一句:这些表是在Oracle 10g捆绑的默认HR模式中定义的。
更新:刚刚发现了一个相关的帖子: Why does Oracle SQL mysteriously resolve ambiguity in one joins and does not in others
也许是因为它是唯一没有别名的人。所以一切都没有“”。在面前首先被视为来自部门的东西。当你给部门别名时,你会得到ORA错误吗? –
2011-06-09 13:17:04
使用11gr2我不能重新创建(总是得到ORA-00918)。也许试试Beta 11gR2 XE,看看你是否可以重新创建。听起来像一个bug – Harrison 2011-06-09 13:51:36
@致命的别名不解决这个谜。 'SELECT * 从员工的经理 加入员工工人在MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID 上depts.manager_id参加部门科指南= 108 其中 部门标识= 100 ;' – Sapience 2011-06-09 13:55:38