加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Oracle 10g不会抱怨列歧义?

发布时间:2020-12-12 13:50:29 所属栏目:百科 来源:网络整理
导读:我正在使用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 = 108where department_id = 100; 问题
我正在使用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应该抱怨where子句中department_id的含糊不清,因为它是表员工和部门中的一个列.事实是在Oracle 10g中,事实并非如此,结果表明它将department_id解释为部门中的部门.但是,如果我注释掉第二个连接语句(上面第4行),Oracle会按预期抱怨“ORA-00918:列模糊定义”.

那么,有人可以帮助解释如何在Oracle 10g中定义歧义吗?或许这是一个10g的错误?

BTW:这些表是在Oracle 10g中捆绑的默认HR模式中定义的.

更新:刚刚找到相关帖子:
Why does Oracle SQL mysteriously resolve ambiguity in one joins and does not in others

我相信这是甲骨文选择不修复的Oracle 10g中的一个错误.当我们将应用程序从10g升级到11gR2时,我们发现了一些关于模糊列名称“松散地”编写但在Oracle 10g中工作的查询.他们都停止了11gR2的工作.我们联系了Oracle,但是他们几乎都说过对模糊列名的容忍行为是Oracle 10g的正确行为,严格的行为是11g的正确行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读