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