我正在尝试用我对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的本地环境中。
感谢。
答案 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;