【发布时间】:2010-09-08 16:47:26
【问题描述】:
我的老板在我创建的查询中发现了一个错误,我不明白该错误背后的原因,尽管查询结果证明他是正确的。这是修复前的查询(简化版):
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) ;
有人知道吗?
【问题讨论】: