2012-10-14 91 views
0

我想在Oracle Express中的SQL中使用子查询来获取员工在其部门中获得的最高薪水的salary_id。我有这些表格是:Oracle SQL中的子查询

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; 

错误tha t我收到的是:ORA-01427:单行子查询返回多个行

如何在SQL中使用子查询执行该SQL命令?

+0

工资表如何链接到员工表?连接在哪里? –

回答

1

有多种方式可以编写这样的查询。您可以将子查询添加到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 

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

+0

任何其他解决方案,第一个我得到一个错误 – Layla

+0

什么是错误? –

+2

@Manolo:第一个工作,请看这里:http://sqlfiddle.com/#!4/0a1ab/1复制时您必须已经发生错误。 –