Когда в условной вставке из нескольких таблиц нужны псевдонимы? - PullRequest
3 голосов
/ 25 мая 2011

Пример из моего учебного руководства по экзамену Oracle SQL Certified Expert меня озадачил.

Оператор SQL:

INSERT
  WHEN (BOSS_SALARY-EMPLOYEE_SALARY < 10000) THEN
    INTO SALARY_CHART (EMP_TITLE, SUPERIOR, EMP_INCOME, SUP_INCOME)
    VALUES (EMPLOYEE, BOSS, EMPLOYEE_SALARY, BOSS_SALARY)
SELECT A.POSITION EMPLOYEE
  , B.POSITION BOSS
  , A.MAX_SALARY EMPLOYEE_SALARY
  , B.MAX_SALARY BOSS_SALARY
FROM POSITIONS A
  JOIN POSITIONS B ON A.REPORTS_TO_POSITION_ID = B.POSITION_ID

Объяснение из книги:

Обратите внимание, что эта версия сделала больше чем требуется, и применяет столбец псевдонимы для каждого столбца в подзапрос, а затем ссылается на эти столбцы псевдонимы WHEN и VALUES статьи. Нам нужен только столбец псевдонимы A.POSITION и B.POSITION в строках 5 и 6, поэтому мы можем ссылаться на псевдонимы столбцов в строке 4.

Мой источник путаницы:

Разве нам не нужны псевдонимы для двух столбцов MAX_SALARY, выбранных в строках 7 и 8, чтобы различать их в строке 4? Похоже, что объяснение предполагает, что псевдонимы EMPLOYEE_SALARY и BOSS_SALARY являются посторонними ...

Может кто-нибудь объяснить это?

1 Ответ

2 голосов
/ 25 мая 2011

Я предполагаю, что они имели в виду, что они нужны только в двух столбцах (например, A.POSITION и A.MAX_SALARY) для устранения неоднозначности для анализатора.Например, это будет работать:

INSERT
  WHEN (MAX_SALARY-EMPLOYEE_SALARY < 10000) THEN
    INTO SALARY_CHART (EMP_TITLE, SUPERIOR, EMP_INCOME, SUP_INCOME)
    VALUES (EMPLOYEE, POSITION, EMPLOYEE_SALARY, MAX_SALARY)
SELECT A.POSITION EMPLOYEE
  , B.POSITION 
  , A.MAX_SALARY EMPLOYEE_SALARY
  , B.MAX_SALARY 
FROM POSITIONS A
  JOIN POSITIONS B ON A.REPORTS_TO_POSITION_ID = B.POSITION_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...