私の上司は、私が作成したクエリにバグを発見しました。クエリの結果は上司が正しいことを証明していますが、バグの背後にある理由がわかりません。修正前のクエリ (簡易版) は次のとおりです。
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 に null 値が表示されていたこと、つまり、クエリ結果に PARTS ではなくテーブル CATEGORIES の結果が含まれていたことです。私が理解できないことは次のとおりです。元のクエリにあいまいさがあった場合、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) ;
誰にも手がかりがありますか?