基于Employee与Salary表,查询工资高于员工ABC的所有员工姓名
查询工资高于员工"ABC"的员工姓名
核心思路
先获取员工"ABC"的工资数值,再关联Employee和Salary表,筛选出工资高于该数值的员工姓名。
方案一:子查询直接实现
这是通用写法,适配所有支持SQL的数据库:
SELECT e.ename FROM Employee e INNER JOIN Salary s ON e.empid = s.empid WHERE s.salary > ( SELECT s2.salary FROM Salary s2 INNER JOIN Employee e2 ON s2.empid = e2.empid WHERE e2.ename = 'ABC' );
方案二:变量优化(针对MySQL等支持变量的数据库)
若需重复使用"ABC"的工资值,这种方式逻辑更清晰:
-- 先将ABC的工资存入变量 SET @abc_salary = ( SELECT s.salary FROM Salary s INNER JOIN Employee e ON s.empid = e.empid WHERE e.ename = 'ABC' ); -- 查询符合条件的员工姓名 SELECT e.ename FROM Employee e INNER JOIN Salary s ON e.empid = s.empid WHERE s.salary > @abc_salary;
特殊情况处理
如果存在多名名为"ABC"的员工,子查询会返回多个值导致报错,此时可根据需求用MAX()或MIN()确定对比的工资值:
SELECT e.ename FROM Employee e INNER JOIN Salary s ON e.empid = s.empid WHERE s.salary > ( SELECT MAX(s2.salary) FROM Salary s2 INNER JOIN Employee e2 ON s2.empid = e2.empid WHERE e2.ename = 'ABC' );
内容的提问来源于stack exchange,提问作者Anees Shaikh
相关产品推荐
相关产品推荐

