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

2024-01-30

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

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)中的“主”表具有歧义优先。 是我错了,还是只是没有正确思考这个问题?

Update:

这是一个修改后的示例,其中不会引发歧义错误:

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) ;

有人有线索吗?


这是查询(简化版)

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

你用的是什么版本的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: 列定义不明确

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左连接中的歧义(仅限 Oracle?) 的相关文章

随机推荐