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

时间:2018-04-23 14:54:04

标签: mysql

我正在尝试用我对SQL的有限知识来解决这个问题。

我有一张桌子,里面有几排员工。每位员工向MGRID报告。数据可以达到7-8级,员工向经理,经理报告。经理,先生。经理到导演,等等。

我的表格如下:

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的本地环境中。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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/