MySQL子查询使用LIMIT报错,如何查询Employee表第二高薪资
MySQL查询第二高薪资报错解决方案
报错原因
你遇到的报错是因为对应版本的MySQL不支持在IN/ALL/ANY/SOME类型的子查询内直接使用LIMIT子句,原始SQL的逻辑虽然正确,但不符合当前版本的语法约束。
可行解决方案
方案1:LIMIT OFFSET写法(支持扩展查询第N高薪资)
该写法直接通过排序分页定位第二高薪资,外层嵌套SELECT处理无第二高薪资时返回NULL的场景,DISTINCT保证返回的是唯一薪资值:
SELECT ( SELECT DISTINCT salary FROM Employee ORDER BY salary DESC LIMIT 1 OFFSET 1 ) AS SecondHighestSalary;
如果需要查询第N高薪资,仅需要将OFFSET 1修改为OFFSET N-1即可。
方案2:MAX聚合写法(语法兼容性更强)
该写法通过聚合函数实现,完全规避了子查询使用LIMIT的语法限制,逻辑为查询小于最高薪资的最大值,天然返回唯一值,无符合结果时自动返回NULL:
SELECT MAX(salary) AS SecondHighestSalary FROM Employee WHERE salary < (SELECT MAX(salary) FROM Employee);
内容的提问来源于stack exchange,提问作者myTest532 myTest532
相关产品推荐
相关产品推荐

