我的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别名是无关的......
有人可以澄清一下吗?
答案 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