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

如何在SQL递归CTE中同时查询多个EmployeeID并返回结果

如何在递归CTE中同时查询多个员工的上级关系

嘿,这个问题很好解决!要在那篇递归CTE的员工查询示例里同时获取多个EmployeeID的上级关系,只需要调整递归CTE的锚点成员(也就是初始SELECT语句)的WHERE条件,再添个小字段区分不同的查询分支就行,我给你具体演示下:

假设你的员工表结构是Employees,包含EmployeeID(员工ID)、ManagerID(上级ID)、EmployeeName(员工姓名)这些核心字段,我们可以这么写:

WITH RecursiveEmployees AS (
    -- 锚点成员:选中所有要查询的起始员工,新增字段标记根节点
    SELECT 
        EmployeeID,
        ManagerID,
        EmployeeName,
        1 AS Level,  -- 标记层级:1是起始员工,2是直接上级,以此类推
        EmployeeID AS RootEmployeeID  -- 用来区分每条记录属于哪个起始员工的分支
    FROM Employees
    WHERE EmployeeID IN (16, 18, 22)  -- 这里替换成你要查询的多个员工ID
    UNION ALL
    -- 递归成员:向上递归查找上级
    SELECT 
        e.EmployeeID,
        e.ManagerID,
        e.EmployeeName,
        re.Level + 1 AS Level,
        re.RootEmployeeID  -- 传递根节点ID,保持分支关联
    FROM Employees e
    JOIN RecursiveEmployees re ON e.EmployeeID = re.ManagerID
)
-- 最终查询结果,按起始员工和层级排序,方便查看
SELECT 
    RootEmployeeID AS 起始员工ID,
    Level AS 层级,
    EmployeeID AS 员工ID,
    EmployeeName AS 员工姓名,
    ManagerID AS 上级ID
FROM RecursiveEmployees
ORDER BY RootEmployeeID, Level;

关键要点说明:

  • 修改WHERE子句:把原来的WHERE EmployeeID = 16改成WHERE EmployeeID IN (...),括号里放你要查询的所有员工ID就行。
  • 新增RootEmployeeID字段:这个字段非常关键!因为递归查询会把所有员工的上级链混在一起,有了它你就能清楚区分每一条记录属于哪个起始员工的分支。
  • 递归传递根节点:在递归成员里一定要把RootEmployeeID继承下去,这样整个递归链都会和对应的起始员工绑定。
  • 排序优化:最后按RootEmployeeID和Level排序,能让每个起始员工的上级关系按层级整齐排列,看起来更清晰。

如果你的需求是把每个员工的上级链拼接成一个字符串(比如“CEO → 部门经理 → 员工16”),也可以调整递归逻辑实现:

WITH RecursiveEmployees AS (
    SELECT 
        EmployeeID,
        ManagerID,
        CAST(EmployeeName AS VARCHAR(MAX)) AS HierarchyPath,
        EmployeeID AS RootEmployeeID
    FROM Employees
    WHERE EmployeeID IN (16, 18, 22)
    UNION ALL
    SELECT 
        e.EmployeeID,
        e.ManagerID,
        CAST(e.EmployeeName + ' → ' + re.HierarchyPath AS VARCHAR(MAX)),
        re.RootEmployeeID
    FROM Employees e
    JOIN RecursiveEmployees re ON e.EmployeeID = re.ManagerID
)
-- 只取每个分支的最顶层上级(也就是没有上级的员工)
SELECT 
    RootEmployeeID AS 起始员工ID,
    HierarchyPath AS 上级关系链
FROM RecursiveEmployees
WHERE ManagerID IS NULL
ORDER BY RootEmployeeID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:31:31