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