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

SQL层级表如何查询二级上级sup_supervisor及多层级上级实现

层级表多级上级查询方案

基础表信息

  • 表名:hierarchy,为存储人员直属汇报关系的SQL表
  • 原生字段:
    • person:文本类型,存储人员姓名
    • supervisor:文本类型,存储对应人员的直属上级
  • 内置示例数据对应关系:
    • Bob的直属上级为Alice
    • Mary的直属上级为Susan
    • Alice的直属上级为David
    • David的直属上级为Mary

批量生成二级上级(sup_supervisor)字段方案

不需要逐人写嵌套子查询,通过表自连接即可一次性为全表生成二级上级字段,通用SQL语句如下:

SELECT 
    t1.person,
    t1.supervisor,
    t2.supervisor AS sup_supervisor
FROM hierarchy t1
LEFT JOIN hierarchy t2 
  ON t1.supervisor = t2.person;

逻辑说明

  • 给同一张hierarchy表分配两个别名:t1存储人员本身及其直属上级信息,t2用来匹配直属上级对应的更高层级关系
  • 采用LEFT JOIN而非内连接,是为了保留「直属上级无对应上级记录」的行:比如示例中Mary的直属上级是Susan,表内不存在Susan作为person的记录,匹配时该行的sup_supervisor会自动返回空值,完全符合需求
  • 语句执行后返回结果和预期完全一致:
    • Bob的sup_supervisor为David
    • Mary的sup_supervisor为空
    • Alice的sup_supervisor为Mary
    • David的sup_supervisor为Susan

三级上级字段实现逻辑

要新增第四列存储第三层级上级(即sup_supervisor的直属上级,比如Bob的第三级上级为Mary),实现逻辑和查询二级上级完全一致,只需要额外增加一次表自连接即可,SQL示例:

SELECT 
    t1.person,
    t1.supervisor,
    t2.supervisor AS sup_supervisor,
    t3.supervisor AS third_level_supervisor
FROM hierarchy t1
LEFT JOIN hierarchy t2 
  ON t1.supervisor = t2.person
LEFT JOIN hierarchy t3
  ON t2.supervisor = t3.person;

提示:上述多表自连接写法仅适用于层级深度固定的场景。如果业务中汇报层级深度不固定,需要使用对应数据库支持的递归CTE语法实现通用层级遍历,不属于本问题覆盖范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:06:30