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

如何查询Supervisor_ID为123管辖分支下的所有员工及下级主管

你这个需求是典型的多层级递归遍历树形结构数据场景,主流关系型数据库都有对应的实现方案,下面给你两种最常用的写法:

方案1:通用递归CTE写法(支持MySQL 8.0+、PostgreSQL、SQL Server等绝大多数新数据库)

思路是先锚定直接向123汇报的一级下属,再循环遍历这些下属的下级,直到没有新的下级员工为止:

WITH RECURSIVE subordinate_tree AS (
  -- 锚点:查询直属123的一级员工
  SELECT Employee_ID
  FROM employee_table
  WHERE Supervisor_ID = '123'

  UNION ALL

  -- 递归:每次关联上一级的员工ID,拉取其下属
  SELECT e.Employee_ID
  FROM employee_table e
  INNER JOIN subordinate_tree st ON e.Supervisor_ID = st.Employee_ID
)
-- 输出去重后的所有员工ID
SELECT DISTINCT Employee_ID FROM subordinate_tree;

执行后返回的结果就是你需要的001、178、002、154、003,不会关联到主管为201的004。

方案2:旧版Oracle专用CONNECT BY语法

如果用的是不支持CTE的旧版Oracle,可以用原生层级查询语法:

SELECT Employee_ID
FROM employee_table
START WITH Supervisor_ID = '123'
CONNECT BY PRIOR Employee_ID = Supervisor_ID;

如果是低于8.0的MySQL版本,没有原生递归语法支持,层级不超过5级的场景可以写多层自关联实现,层级不确定的话优先升级数据库版本或者用存储过程循环实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:03