You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:05