SQL自表比较:基于emp表实现左低右高的薪资人员配对查询
SQL实现员工按薪资高低两两配对方案
实现逻辑
核心是利用表自连接完成配对筛选:
- 给
emp表设置两个不同别名,分别代表配对的左侧(低薪)和右侧(高薪)对象 - 通过连接条件限制左侧薪资必须小于右侧薪资,自动排除自身配对、反向重复配对的无效数据
- 按薪资排序输出即可得到符合要求的结果
具体SQL代码
SELECT a.ename, b.ename FROM emp a INNER JOIN emp b ON a.sal < b.sal ORDER BY a.sal, b.sal;
样例执行说明
针对你提供的测试数据,SQL执行流程如下:
- 当左表取Jack(薪资500)时,右表可匹配到所有薪资大于500的Smith、Mark,输出两行
Jack Smith、Jack Mark - 当左表取Smith(薪资1000)时,右表可匹配到薪资大于1000的Mark,输出一行
Smith Mark - 当左表取Mark(薪资2000)时,不存在薪资更高的员工,无匹配输出
最终结果和你给出的预期完全一致。
扩展说明
如果存在薪资相同的员工,且需要同薪资也完成不重复配对,可修改连接条件为:
ON a.sal < b.sal OR (a.sal = b.sal AND a.ename < b.ename)
该条件可避免同薪资的两个员工出现双向重复配对的问题。
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

