当前位置:  开发笔记 > 编程语言 > 正文

左连接中的歧义(仅限oracle?)

如何解决《左连接中的歧义(仅限oracle?)》经验,为你挑选了1个好方法。

我的老板在我创建的查询中发现了一个错误,我不明白错误背后的原因,尽管查询结果证明他是正确的.这是修复之前的查询(简化版):

select PTNO,PTNM,CATCD
from PARTS 
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD); 

这是在修复之后:

select PTNO,PTNM,PARTS.CATCD
from PARTS 
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD); 

错误是,列CATCD显示空值,即查询结果包括表CATEGORIES而不是PARTS的结果.这是我不明白的:如果原始查询中存在歧义,为什么Oracle没有抛出错误?据我所知,在左连接的情况下,查询(PARTS)中的"主"表优先于歧义.我错了,还是没有正确地思考这个问题?

更新:

这是一个修改过的示例,其中不会抛出歧义错误:

CREATE TABLE PARTS (PTNO NUMBER, CATCD NUMBER, SECCD NUMBER);

CREATE TABLE CATEGORIES(CATCD NUMBER);

CREATE TABLE SECTIONS(SECCD NUMBER, CATCD NUMBER);


select PTNO,CATCD 
from PARTS 
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD) 
left join SECTIONS on (SECTIONS.SECCD=PARTS.SECCD) ;

有人有线索吗?



1> Pat..:

这是查询(简化版)

我认为通过简化查询,您删除了错误的真正原因:-)

您使用的是哪个oracle版本?Oracle 10g(10.2.0.1.0)给出:

create table parts (ptno number , ptnm number , catcd number);  
create table CATEGORIES (catcd number);

select PTNO,PTNM,CATCD from PARTS  
left join CATEGORIES on (CATEGORIES.CATCD=PARTS.CATCD);

我得到ORA-00918:列模糊定义

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有