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

问题描述

| 我的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行中引用列别名。 我的困惑来源: 为了在第4行中区分它们,我们是否也不需要在第7和8行中选择的两个MAX_SALARY列上的别名?解释似乎表明EMPLOYEE_SALARY和BOSS_SALARY别名是多余的... 有人可以澄清一下吗?     

解决方法

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...