with recursive emp2(ename,empno,lvl) as
(
SELECT ename,empno,1 lvl
from emp
where ename = 'JONES'
union ALL
select e1.ename,e1.empno,lvl + 1
from emp e1,emp2 e2
where e1.mgr = e2.empno
)
select ename,lvl from emp2
测试记录:
mysql> with recursive emp2(ename,empno,lvl) as
-> (
-> SELECT ename,empno,1 lvl
-> from emp
-> where ename = 'JONES'
-> union ALL
-> select e1.ename,e1.empno,lvl + 1
-> from emp e1,emp2 e2
-> where e1.mgr = e2.empno
-> )
-> select ename,lvl from emp2;
+-------+------+
| ename | lvl |
+-------+------+
| JONES | 1 |
| SCOTT | 2 |
| FORD | 2 |
| ADAMS | 3 |
| SMITH | 3 |
+-------+------+
5 rows in set (0.01 sec)