Oracle SQL 中的子查询
Posted
技术标签:
【中文标题】Oracle SQL 中的子查询【英文标题】:subqueries in Oracle SQL 【发布时间】:2012-10-14 05:57:19 【问题描述】:我想在 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 命令?
【问题讨论】:
工资表如何链接到员工表?连接在哪里? 【参考方案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
相关子查询通常较慢,因此首选第一种形式。
【讨论】:
@Manolo:第一个确实有效,请参见此处:sqlfiddle.com/#!4/0a1ab/1 你一定是在复制时出错了。 对不起,我在字段中犯了一个错误,解决方案效果很好,谢谢大家,也感谢最后一篇文章,网页似乎真的很方便。以上是关于Oracle SQL 中的子查询的主要内容,如果未能解决你的问题,请参考以下文章