mysql从平面表创建树/组织结构

qpgpyjmq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(383)

我试图用我有限的sql知识来解决这个问题。
我有一张table,有几排员工。每个员工向一个mgrid报告。数据可以深入到7-8级,员工向经理汇报,经理向高级经理汇报,高级经理向主管汇报,等等。
我的table是这样的:

EMPID   NAME        MGRID
1       Alex        8
2       Jane        9
3       Bob         10
4       Shack       11
5       Chris       8
6       Sarah       10
7       James       8
8       Michelle    11
9       Ana         11  
10      Steve       11
11      Ron         NULL. <= CEO
12      Mike        3
13      Jenn        3

我的最终目标是输出这样的东西(多层次)

Ron
    Shack
    Steve
        Bob
            Mike
            Jenn
        Sarah
    Ana
        Jane
    Michelle
        James
        Chris   
        Alex
        Chris

目前在5.6版本的mysql开发环境和8.0版本的本地环境中。
谢谢。

xhv8bpkk

xhv8bpkk1#

经过大量的搜索,我找到了一个解决方案,可以生成我想要的结果(或者至少非常接近我需要的结果)。我把这个答案贴给其他可能在找的人。

WITH RECURSIVE descendants AS
 (
  SELECT EMPID, NAME, MGRID,  1 as level 
   FROM `EMPTABLE`
    WHERE MGRID = NULL
    UNION ALL
    SELECT t.EMPID, t.NAME, t.MGRID, d.level+1
    FROM descendants d, `EMPTABLE` t
    WHERE t.MGRID = d.EMPID
    )
SELECT * FROM descendants ORDER BY level;

这就是我找到的资源https://mysqlserverteam.com/mysql-8-0-1-recursive-common-table-expressions-in-mysql-ctes-part-four-depth-first-or-breadth-first-traversal-transitive-closure-cycle-avoidance/

相关问题