我正在使用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
;
Run Code Online (Sandbox Code Playgroud)
问题是我认为Oracle应该抱怨department_idwhere子句中的歧义,因为它是表employees和表中的一列departments.事实是在Oracle 10g中,它没有,结果表明它将其解释department_id为departments.但是,如果我注释掉第二个连接语句(上面的第4行),Oracle会按预期抱怨"ORA-00918:列模糊定义".
那么,有人可以帮助解释如何在Oracle 10g中定义歧义吗?或许这是一个10g的错误?
BTW:这些表是在Oracle 10g中捆绑的默认HR模式中定义的.
更新:刚刚发现了一个相关的帖子: 为什么Oracle SQL神秘地解决了一个连接中的歧义而在其他连接中没有
Ola*_*laf 10
我相信这是甲骨文选择不修复的Oracle 10g中的一个错误.当我们将应用程序从10g升级到11gR2时,我们发现了一些关于模糊列名称"松散地"编写但在Oracle 10g中工作的查询.他们都停止了11gR2的工作.我们联系了Oracle,但他们几乎都说对于模糊列名称的容忍行为是Oracle 10g的正确行为,严格的行为是11g的正确行为.
| 归档时间: |
|
| 查看次数: |
3961 次 |
| 最近记录: |