Мой босс обнаружил ошибку в запросе, который я создал, и я не понимаю причину ошибки, хотя результаты запроса подтверждают, что он правильный. Вот запрос (упрощенная версия) перед исправлением:
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) ;
У кого-нибудь есть подсказка?