В случае использования одинакового алиаса дважды, на какой будут ссылаться последующие обращения?

Есть запрос, который дважды джойнит таблицу с одинаковым алиасом (но разными условиями). К какому из двух наборов данных будут обращаться последующие упоминания этого, одинакового для двух таблиц алиаса?

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 шт):

Автор решения: CrazyElf

Это баг древней версии Оракла. Не нужно полагаться на ошибку в ПО и выводить правила, по которым она работает. Этот баг был давно исправлен. Вот что говорят современные онлайн версии Оракла при выборе языка 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
→ Ссылка