Почему Oracle SQL таинственным образом разрешает неоднозначность в одних объединениях, а не в других? - PullRequest
3 голосов
/ 16 июля 2010

Я пользователь Oracle 10g.Мне пришлось написать несколько SQL-запросов, и я обнаружил загадочное (на мой взгляд) поведение.Давайте представим, что у нас есть таблица, которая может объединиться в некую простую двухуровневую древовидную структуру.Следующий запрос дает мне «ошибку неоднозначности», которая ожидается:

select title
  from table1
    left join table1 on condition

НО, если я добавлю еще одну таблицу в объединение, проблема неоднозначности просто исчезнет:1006 * Что бы объяснить это?Я скучаю по нему полностью ... Полный тестовый пример можно найти на http://pastebin.com/webf513w

1 Ответ

5 голосов
/ 16 июля 2010

Для третьего запроса Oracle 10g возвращает field3 из второй TestTable1 (псевдоним TestTable1_2). Похоже, что это ошибка, которая, похоже, была исправлена ​​в 11g.

TestCase:

INSERT INTO TestTable1 VALUES (1,2,3,NULL);
INSERT INTO TestTable1 VALUES (2,5,6,1);
INSERT INTO TestTable2 VALUES (5,6,7);
INSERT INTO TestTable2 VALUES (2,20,30);

SELECT field3
FROM TestTable1
join TestTable2 ON TestTable1.field1 = TestTable2.field1
left join TestTable1 TestTable1_2 ON TestTable1.self_ref = TestTable1_2.id;

FIELD3
======
3
(null)

SELECT TestTable1.field3, TestTable2.field3, TestTable1_2.field3
FROM TestTable1
join TestTable2 ON TestTable1.field1 = TestTable2.field1
left join TestTable1 TestTable1_2 ON TestTable1.self_ref = TestTable1_2.id;

FIELD3 FIELD3_1 FIELD3_2
====== ======== ========
6      7        3
3      30       (null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...