我正在尝试查找创建一个查询,该查询将返回一组员工的姓氏及其附加的成绩等级(在另一个表中,没有与工作人员一起提供的外键关系)。
到目前为止,我有这个,但它正在返回一个“缺少关键字”错误。这有什么问题?/我的逻辑错了吗?
姓氏和工资在员工/员工表中。 成绩水平在工作成绩表中。
select last_name, salary,
CASE grade_level
WHEN lowest_sal >= 1000 THEN 'A'
WHEN lowest_sal >= 3000 THEN 'B'
WHEN lowest_sal >= 6000 THEN 'C'
WHEN lowest_sal >= 10000 THEN 'D'
WHEN lowest_sal >= 15000 THEN 'E'
ELSE 'F'
END
FROM employees, job_grades
WHERE department_id > 50;
答案 0 :(得分:0)
CASE
声明中存在语法错误
重要的是 - 您错过了JOIN
条件
SELECT LAST_NAME
, SALARY
, CASE
WHEN LOWEST_SAL >= 1000 THEN 'A'
WHEN LOWEST_SAL >= 3000 THEN 'B'
WHEN LOWEST_SAL >= 6000 THEN 'C'
WHEN LOWEST_SAL >= 10000 THEN 'D'
WHEN LOWEST_SAL >= 15000 THEN 'E'
ELSE 'F'
END AS GRADE_LEVEL
FROM EMPLOYEES
JOIN JOB_GRADES
ON EMPLOYEES.ID = JOB_GRADES.EMP_ID
WHERE DEPARTMENT_ID > 50;
答案 1 :(得分:0)
对每个人都可能遇到这个问题。我有点愚蠢,因为我不需要使用CASE,但如果你需要检查上面给出正确答案的答案。
以下是适合我的代码。它基本上是使用JOIN ON子句来连接没有关系的2个表。
select last_name, salary, grade_level
FROM employees JOIN job_grades ON (salary BETWEEN lowest_sal AND highest_sal)
WHERE department_id > 50;
答案 2 :(得分:0)
您刚刚将SQL从非ANSI标准转换为ANSI标准。但是使用非ANSI标准可以实现同样的目的。我在原始查询中看到,您尝试加入表但未定义加入条件。这些表之间是否存在关系完整性(外键)并不重要。加入2个表时,必须使用加入条件。
SELECT
LAST_NAME,
SALARY,
CASE GRADE_LEVEL
WHEN LOWEST_SAL >= 1000 THEN 'A'
WHEN LOWEST_SAL >= 3000 THEN 'B'
WHEN LOWEST_SAL >= 6000 THEN 'C'
WHEN LOWEST_SAL >= 10000 THEN 'D'
WHEN LOWEST_SAL >= 15000 THEN 'E'
ELSE 'F'
END
FROM
EMPLOYEES EMP, JOB_GRADES JOBS --**MISSING Joining Criteria**
WHERE
DEPARTMENT_ID > 50;
为了解决这个问题,你需要像下面那样
SELECT
LAST_NAME,
SALARY,
CASE GRADE_LEVEL
WHEN LOWEST_SAL >= 1000 THEN 'A'
WHEN LOWEST_SAL >= 3000 THEN 'B'
WHEN LOWEST_SAL >= 6000 THEN 'C'
WHEN LOWEST_SAL >= 10000 THEN 'D'
WHEN LOWEST_SAL >= 15000 THEN 'E'
ELSE 'F'
END
FROM
EMPLOYEES EMP, JOB_GRADES JOBS
WHERE
EMP.EMPLOYEES.ID = JOB_GRADES.EMP_ID --**This is the FIX**
AND DEPARTMENT_ID > 50;