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

基于CTE的团队层级查询:多管理者场景下获取B的下属层级

多管理者场景下的员工层级查询解决方案

原代码问题分析

你的CTE代码未生效主要有三个原因:

  • 字段名不匹配:原表字段为employee和manager,但代码中错误使用了emp、mang这类不存在的字段名。
  • 递归逻辑错误:递归查询下属时,关联条件写反了——应该用当前层级的员工作为管理者,关联表中manager字段匹配的记录,而非反过来。
  • 未处理重复员工:由于存在多管理者场景(比如E同时归C和D管理),同一员工会被多次递归命中,需要去重避免重复输出。

修正后的层级查询代码

先获取包含每个员工层级的完整数据:

WITH hierarchy AS (
    -- 初始节点:目标管理者B,层级为1
    SELECT employee, 1 AS lvl
    FROM hrc
    WHERE employee = 'B'
    UNION ALL
    -- 递归获取下属:以上一层级的员工为管理者,关联其直接下属
    SELECT t.employee, h.lvl + 1 AS lvl
    FROM hierarchy h
    JOIN hrc t ON h.employee = t.manager
    -- 去重:避免同一员工因多管理者被重复加入
    WHERE NOT EXISTS (
        SELECT 1 FROM hierarchy h2 WHERE h2.employee = t.employee
    )
)
SELECT * FROM hierarchy ORDER BY lvl, employee;

如果需要按层级聚合得到你预期的B > C、D > E、F > G、H格式,可以使用以下代码:

WITH hierarchy AS (
    SELECT employee, 1 AS lvl
    FROM hrc
    WHERE employee = 'B'
    UNION ALL
    SELECT t.employee, h.lvl + 1 AS lvl
    FROM hierarchy h
    JOIN hrc t ON h.employee = t.manager
    WHERE NOT EXISTS (
        SELECT 1 FROM hierarchy h2 WHERE h2.employee = t.employee
    )
)
SELECT GROUP_CONCAT(DISTINCT employee ORDER BY employee SEPARATOR '、') AS 层级员工, lvl
FROM hierarchy
GROUP BY lvl
ORDER BY lvl;

代码说明

  1. 初始查询:定位到管理者B,将其层级设为1,作为递归的起点。
  2. 递归关联:通过h.employee = t.manager关联,获取上一层级员工的所有直接下属,并将层级加1。
  3. 去重逻辑:NOT EXISTS子句确保同一员工只会被加入递归结果一次,避免重复。
  4. 层级聚合:使用GROUP_CONCAT按层级分组拼接员工名称,得到你需要的层级链格式。

输出结果

执行聚合代码后,会得到以下结果:

层级员工lvl
B1
C、D2
E、F3
G、H4

对应层级链:B > C、D > E、F > G、H

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:42:36