Неопределенность в левом соединении (только оракул?) - PullRequest
4 голосов
/ 12 сентября 2008

Мой босс обнаружил ошибку в запросе, который я создал, и я не понимаю причину ошибки, хотя результаты запроса подтверждают, что он правильный. Вот запрос (упрощенная версия) перед исправлением:

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

У кого-нибудь есть подсказка?

Ответы [ 12 ]

0 голосов
/ 12 сентября 2008

Как и в HollyStyles, я не могу найти в документации Oracle ничего, что могло бы объяснить, что вы видите.

PostgreSQL, DB2, MySQL и MSSQL отказываются выполнять первый запрос, поскольку он неоднозначен.

0 голосов
/ 12 сентября 2008

Обычно рекомендуется быть точным и полностью указывать имена всех столбцов, так как это экономит оптимизатору немного работы. Конечно, в SQL Server.

Из того, что я могу почерпнуть из Oracle документов , кажется, что он будет выдавать только если вы выберете имя столбца дважды в списке выбора или один раз в списке выбора, а затем снова в другом месте, как порядок по пункту.

Возможно, вы обнаружили «недокументированную особенность»:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...