多表条件插入中何时需要别名?

时间:2011-05-24 23:00:23

标签: sql database oracle plsql

我的Oracle SQL认证专家考试学习指南中的一个例子令我感到困惑。

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行中的列别名。

我的困惑之源:

我们是否需要在第7行和第8行中选择的两个MAX_SALARY列上的别名,以便在第4行区分它们?解释似乎表明EMPLOYEE_SALARY和BOSS_SALARY别名是无关的......

有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:2)

我猜他们意味着他们只需要两列(例如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