Почему Oracle 10g не жалуется на неоднозначность столбцов? - PullRequest
10 голосов
/ 09 июня 2011

Я использую Oracle 10g (XE 10.2.0.1.0) и нахожу поведение, которое я не понимаю:

select * 
from employees manager
    join employees worker on MANAGER.EMPLOYEE_ID = WORKER.MANAGER_ID
    join departments on DEPARTMENTS.manager_id = 108
where
    department_id = 100
;

Проблема в том, что, по-моему, Oracle следовало бы пожаловаться на неоднозначность department_id в предложении where, поскольку это столбец в таблице employees и departments. Дело в том, что в Oracle 10g это не так, и результат показывает, что он интерпретирует department_id как значение в departments. Однако, если я закомментирую второй оператор соединения (4-я строка выше), Oracle будет жаловаться на то, что «ORA-00918: столбец неоднозначно определен», как и ожидалось.

Итак, кто-нибудь может помочь объяснить, как неопределенность определяется в Oracle 10g? Или, может быть, это ошибка в 10g?

Кстати: таблицы определены в схеме HR по умолчанию, связанной с Oracle 10g.

Обновление: только что нашел связанный пост: Почему Oracle SQL таинственным образом разрешает неоднозначность в одних объединениях, а не в других

Ответы [ 2 ]

10 голосов
/ 09 июня 2011

Я считаю, что это ошибка в Oracle 10g, которую Oracle решил не исправлять.Когда мы обновляли наши приложения с 10g до 11gR2, мы обнаружили пару запросов, которые были написаны «слабо» в отношении неоднозначных имен столбцов, но работали в Oracle 10g.Они все перестали работать в 11gR2.Мы связались с Oracle, но они в значительной степени сказали, что толерантное поведение по отношению к неоднозначным именам столбцов является правильным поведением для Oracle 10g, а жесткое поведение - правильным поведением для 11g.

1 голос
/ 09 июня 2011

Я так думаю, потому что у департаментов нет alias. Поэтому все, не прошедшее квалификацию <alias>., сначала рассматривается как departments.

Так что я также думаю, что когда вы дадите псевдониму departments, вы должны снова получить ORA-00918. Не могу проверить здесь, хотя ...

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