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

如何使用SQL查询所有员工的隔级上级(skip level manager)信息

问题原因分析

你原查询的自连接条件逻辑完全错误,用b.mgrid > a.mgrid的数值大小比较,和上下级层级关系没有关联,自然拿不到正确结果。
隔级上级的核心逻辑是:员工A的直接上级是B,B的直接上级就是A的隔级上级,还需要兼容两个边界场景:

  • 员工的直接上级已经是最高级(无上级),隔级上级取该直接上级
  • 员工本身就是最高级,隔级上级返回null

修正后的查询语句

SELECT
  a.Empid,
  COALESCE(b.Mgrid, a.Mgrid) AS SkipLevelMgr
FROM emp a
LEFT JOIN emp b
ON a.Mgrid = b.Empid
ORDER BY a.Empid;

逻辑说明

  • 用LEFT JOIN做自连接,关联条件为员工a的直接上级ID(a.Mgrid)等于上级员工的ID(b.Empid),此时查询到的b.Mgrid就是正常场景下a的隔级上级
  • 用COALESCE函数处理边界:如果b.Mgrid为null(即a的直接上级已经是最高级,无上级),就直接返回a的直接上级作为隔级上级,符合示例中empid=7返回8的要求
  • 本身是最高级的员工(empid=8),a.Mgrid本身为null,返回结果也为null,符合预期

内容的提问来源于stack exchange,提问作者user16714516

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:57:02