如何构建含JOIN与CASE的SQL查询?查询结构修正求助
修正后的SQL查询及问题说明
错误分析
你的SQL存在几个关键问题:
- JOIN语句位置错误:JOIN必须紧跟在
FROM子句之后,不能放在SELECT和FROM之间。 - CASE语句位置错误:CASE表达式需要作为
SELECT列表中的一列,并且要指定别名才能正确返回结果。 - 关联逻辑偏差:要获取经理的佣金状态和所在部门,需要先关联到经理的员工记录(
COMMISSION_PCT属于员工表字段),再通过经理的部门ID关联部门表,而非直接用员工的经理ID关联部门的经理ID。
修正后的查询代码
SELECT CONCAT(FIRST_NAME, ' ', LAST_NAME) AS "Name And Surname", CASE WHEN MANAGERS.COMMISSION_PCT IS NULL THEN FALSE ELSE TRUE END AS "Manager Has Premium", DEPARTMENTS.DEPARTMENT_NAME AS "Manager's Department" FROM HR.EMPLOYEES LEFT JOIN HR.EMPLOYEES AS MANAGERS ON EMPLOYEES.MANAGER_ID = MANAGERS.EMPLOYEE_ID LEFT JOIN HR.DEPARTMENTS ON MANAGERS.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID;
代码说明
CONCAT(FIRST_NAME, ' ', LAST_NAME):简化姓名拼接逻辑,一次CONCAT完成名、空格、姓的连接。- CASE表达式:判断经理的
COMMISSION_PCT是否为空,返回布尔值TRUE/FALSE,通过别名明确列含义。 - 两次LEFT JOIN:先关联员工表自身获取经理的详细信息,再通过经理的部门ID关联部门表,确保正确拿到经理所在的部门名称。
内容的提问来源于stack exchange,提问作者Octopus
相关产品推荐
相关产品推荐

