Oracle SCOTT库查询薪资低于直属经理的员工 错误SQL如何修正?
原SQL错误点位
- 子查询未和外层员工表做关联,你写的
NOT EXISTS逻辑是判断当前库是否不存在任何经理,而非判断当前员工是否没有直属经理,逻辑完全偏离需求 - 查询结果仅返回薪资字段
sal,没有返回你需要的员工姓名ename - 完全没有实现「员工薪资和直属经理薪资对比」的核心逻辑
正确实现SQL
写法1:自关联查询(最直观)
SELECT e.ename AS 员工姓名, e.sal AS 员工薪资, m.ename AS 直属经理姓名, m.sal AS 经理薪资 FROM SCOTT.emp e -- 关联匹配员工的直属经理:员工MGR字段对应经理的EMPNO LEFT JOIN SCOTT.emp m ON e.mgr = m.empno -- 筛选薪资低于直属经理的员工,默认排除无上级的总裁KING WHERE e.sal < m.sal;
如果需要同时保留没有直属经理的员工,可将WHERE条件修改为:
WHERE (m.empno IS NOT NULL AND e.sal < m.sal) OR m.empno IS NULL;
写法2:EXISTS子查询(匹配你原本想用子查询的编码习惯)
SELECT e.ename AS 员工姓名, e.sal AS 员工薪资 FROM SCOTT.emp e WHERE EXISTS ( SELECT 1 FROM SCOTT.emp m WHERE m.empno = e.mgr AND e.sal < m.sal );
结果验证
根据你提供的样例数据,查询结果会排除无上级的KING、薪资高于直属经理的FORD,返回其余所有符合要求的员工。
内容的提问来源于stack exchange,提问作者ResCrove
相关产品推荐
相关产品推荐

