[英]subqueries in Oracle SQL
我想在Oracle Express中使用SQL中的子查询来获取员工在其部门中获得的最高薪水的薪金ID。 我有的表是:
Employee
Emp_id Salary Dept_id
100 1000 a101
200 2000 a101
300 2500 b102
Salary
Grade LowSal HiSal
1 500 900
2 901 2000
3 2001 3000
首先,我使用此查询提取每个部门的最高薪水:
SELECT Max(e.SALARY)
FROM EMPLOYEE e
GROUP BY e.DEPT_ID
结果是两个记录:2000和2500
下一步是获取这些薪水的等级,因此我使用以下内容:
SELECT GRADE
FROM SALARY
WHERE (SELECT Max(e.SALARY)
FROM EMPLOYEE e
GROUP BY e.DEPT_ID) BETWEEN LOWSAL AND HIGHSAL;
我收到的错误是:ORA-01427:单行子查询返回多个行
如何使用SQL中的子查询执行该SQL命令?
有多种方法可以编写此类查询。 您可以将子查询添加到FROM
子句中:
SELECT grade
FROM (SELECT max(salary) AS sal FROM employee GROUP BY dept_id) ms
JOIN salary ON ms.sal BETWEEN salary.lowsal AND salary.hisal;
或者,您可以使用相关子查询:
SELECT (SELECT grade FROM salary WHERE max(salary) BETWEEN lowsal AND hisal)
FROM employee
GROUP BY dept_id
相关子查询通常较慢,因此首选第一种形式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.