MySQL中給定父行找到所有子行的解決方案
備注:測(cè)試數(shù)據(jù)庫(kù)版本為MySQL 8.0
如需要scott用戶(hù)下建表及錄入數(shù)據(jù)語(yǔ)句,可參考:
scott建表及錄入數(shù)據(jù)sql腳本
一.需求找到直接及簡(jiǎn)介(即JONES下屬的下屬)為JONES工作的所有員工。
JONES下屬的員工列表如下所示:
±------±-----+| ename | lvl |±------±-----+| JONES | 1 || SCOTT | 2 || FORD | 2 || ADAMS | 3 || SMITH | 3 |±------±-----+二.解決方案
能夠移到數(shù)的絕對(duì)頂部和底部是非常有用的。
對(duì)于這個(gè)解決方案,不需要特殊的格式設(shè)置。目標(biāo)只是返回位于員工JONES下屬的所有員工,其中包括JONES自己。
這種類(lèi)型的查詢(xún)展示了遞歸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 ALLselect e1.ename,e1.empno,lvl + 1 from emp e1,emp2 e2 where e1.mgr = e2.empno)select ename,lvl from emp2
測(cè)試記錄:
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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. idea連接sql sever2019圖文教程(超詳細(xì))2. mysql的like模式3. 數(shù)據(jù)庫(kù)相關(guān)的幾個(gè)技能:ACCESS轉(zhuǎn)SQL4. Mysql入門(mén)系列:建立MYSQL客戶(hù)機(jī)程序的一般過(guò)程5. Oracle學(xué)習(xí)筆記之二----查詢(xún)6. Linux安裝ODBC連接SQLServer數(shù)據(jù)庫(kù)的步驟7. Sqlserver之死鎖查詢(xún)以及批量解鎖的實(shí)現(xiàn)方法8. Mysql入門(mén)系列:對(duì)MYSQL查詢(xún)中有疑問(wèn)的數(shù)據(jù)進(jìn)行編碼9. 詳解MySQL中的數(shù)據(jù)類(lèi)型和schema優(yōu)化10. SqlServer 多種分頁(yè)方式 詳解(含簡(jiǎn)單速度測(cè)試)
