В случае использования одинакового алиаса дважды, на какой будут ссылаться последующие обращения?
Есть запрос, который дважды джойнит таблицу с одинаковым алиасом (но разными условиями). К какому из двух наборов данных будут обращаться последующие упоминания этого, одинакового для двух таблиц алиаса?
SELECT ...
FROM table_1
JOIN table_2 A ON ...
JOIN table_3 A ON ...
JOIN table_4 B ON A.col_1 = B.col_1
Простой проведенный мной эксперимент со следующим запросом:
WITH
test_1 AS (SELECT 1 AS col_1 FROM dual UNION ALL SELECT 2 AS col_1 FROM dual)
, test_2 AS (SELECT 2 AS col_1 FROM dual UNION ALL SELECT 3 AS col_1 FROM dual)
, test_3 AS (SELECT 1 AS col_1 FROM dual UNION ALL SELECT 2 AS col_1 FROM dual)
, test_4 AS (SELECT 1 AS col_1 FROM dual UNION ALL SELECT 2 AS col_1 FROM dual)
SELECT *
FROM test_1 b
LEFT JOIN test_2 a ON a.col_1 = b.col_1
LEFT JOIN test_3 a ON a.col_1 = b.col_1
LEFT JOIN test_4 c ON a.col_1 = c.col_1;
Результат:
col_1 | col_1 | col_1 | col_1 |
---|---|---|---|
1 | null | 1 | null |
2 | 2 | 2 | 2 |
Намекает на то, что джойн таблицы test_4 происходит к первому упоминанию алиаса. При этом все чатботы уверены, что должен использоваться последний упомянутый алиас. Поэтому для обоснования багфикса потребуется высеченное в граните правило (может эксперимент не охвативает все возможные случаи поведения). Так как "по правилам" используется алиас, который использован дважды в Oracle?
Ответы (1 шт):
Это баг древней версии Оракла. Не нужно полагаться на ошибку в ПО и выводить правила, по которым она работает. Этот баг был давно исправлен. Вот что говорят современные онлайн версии Оракла при выборе языка Oracle Database, либо языка Oracle PL/SQL, ошибка при этом одинаковая:
LEFT JOIN test_4 c ON a.col_1 = c.col_1
*
ERROR at line 10:
ORA-00918: COL_1: column ambiguously specified - appears in TEST_3 and TEST_2