前言
備注:測試數(shù)據(jù)庫版本為MySQL 8.0
如需要scott用戶下建表及錄入數(shù)據(jù)語句,可參考:
scott建表及錄入數(shù)據(jù)sql腳本
一.需求
找到直接及簡介(即JONES下屬的下屬)為JONES工作的所有員工。
JONES下屬的員工列表如下所示:
±------±-----+
| ename | lvl |
±------±-----+
| JONES | 1 |
| SCOTT | 2 |
| FORD | 2 |
| ADAMS | 3 |
| SMITH | 3 |
±------±-----+
二.解決方案
能夠移到數(shù)的絕對頂部和底部是非常有用的。
對于這個解決方案,不需要特殊的格式設(shè)置。目標(biāo)只是返回位于員工JONES下屬的所有員工,其中包括JONES自己。
這種類型的查詢展示了遞歸SQL拓展的有用性,如Oracle的connect by和SQL Server/DB 2/MySQL 8.0的with子句等。
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)
總結(jié)
到此這篇關(guān)于MySQL中給定父行找到所有子行的文章就介紹到這了,更多相關(guān)MySQL給定父行找所有子行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!