oraclesql中的子查询

oraclesql中的子查询,sql,oracle,Sql,Oracle,我想在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 300

我想在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

相关子查询通常较慢,因此首选第一种形式。

薪资表如何链接到员工表?连接在哪里?@Manolo:第一个确实有效,请看这里:您在复制时一定犯了错误。对不起,我在字段中犯了一个错误,解决方案非常有效,谢谢大家,还有最后一篇文章,该网页看起来非常方便。