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

编写SQL查询:从Employee表获取员工及上下级管理者完整信息

员工层级信息查询SQL语句

需求说明

需要编写SQL查询语句,输出以下字段:

  • EmpId:员工ID
  • EmpName:员工姓名
  • ManagerId:直属经理ID
  • ManagerName:直属经理姓名
  • TopManagerId:最高层级经理ID(公司/部门最顶端管理者)
  • TopManagerName:最高层级经理姓名

输出格式示例:

EmpId,EmpName,ManagerId,ManagerName,TopManagerId,TopManagerName

已知表结构

Employee表包含3个字段:

EmpId,EmpName,ManagerId

其中ManagerId为员工的直属经理ID,顶端管理者的ManagerId为NULL。

SQL查询语句

WITH RecursiveEmployees AS (
    -- 从顶端管理者开始(无上级的员工),初始顶端经理为自身
    SELECT 
        EmpId,
        EmpName,
        ManagerId,
        EmpId AS TopManagerId,
        EmpName AS TopManagerName
    FROM Employee
    WHERE ManagerId IS NULL

    UNION ALL

    -- 递归遍历所有下属员工,继承顶端经理信息
    SELECT 
        e.EmpId,
        e.EmpName,
        e.ManagerId,
        re.TopManagerId,
        re.TopManagerName
    FROM Employee e
    JOIN RecursiveEmployees re ON e.ManagerId = re.EmpId
)
-- 关联直属经理的姓名,输出最终结果
SELECT 
    re.EmpId,
    re.EmpName,
    re.ManagerId,
    m.EmpName AS ManagerName,
    re.TopManagerId,
    re.TopManagerName
FROM RecursiveEmployees re
LEFT JOIN Employee m ON re.ManagerId = m.EmpId
ORDER BY re.EmpId;

语句说明

  1. 递归CTE(RecursiveEmployees):从无上级的顶端管理者出发,向下递归遍历所有下属员工,将顶端管理者的ID和姓名传递给每一层下属,确保每个员工都能关联到所在分支的最高层级经理。
  2. 左连接获取直属经理姓名:通过LEFT JOIN关联Employee表,根据ManagerId获取直属经理姓名,避免因员工自身是顶端管理者(无直属经理)导致记录丢失。
  3. 排序:最终结果按员工ID排序,便于查看。

内容的提问来源于stack exchange,提问作者Jithesh K Ramesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:35:15