MySQL中給定父行找到所有子行的解決方案
備注:測試數(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ù)的絕對(duì)頂部和底部是非常有用的。
對(duì)于這個(gè)解決方案,不需要特殊的格式設(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 ALLselect 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)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Oracles XMLDB Study NOTE (2)2. Oracle數(shù)據(jù)庫中臨時(shí)表的進(jìn)一步深入研究3. 盤點(diǎn)SqlServer 分頁方式和拉姆達(dá)表達(dá)式分頁4. 解決MySQL讀寫分離導(dǎo)致insert后select不到數(shù)據(jù)的問題5. 初識(shí)SQLITE3數(shù)據(jù)庫6. SQLServer的內(nèi)存管理架構(gòu)詳解7. mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)8. 詳解mysql 中的鎖結(jié)構(gòu)9. Mysql優(yōu)化方法詳細(xì)介紹10. 為SQLite3提供一個(gè)ANSI到UTF8的互轉(zhuǎn)函數(shù)
