MySQL中給定父行找到所有子行的解決方案
前言
備註:測試數據庫版本為MySQL 8.0
如需要scott用戶下建表及錄入數據語句,可參考:
scott建表及錄入數據sql腳本
一.需求
找到直接及簡介(即JONES下屬的下屬)為JONES工作的所有員工。
JONES下屬的員工列表如下所示:
±------±-----+ | ename | lvl | ±------±-----+ | JONES | 1 | | SCOTT | 2 | | FORD | 2 | | ADAMS | 3 | | SMITH | 3 | ±------±-----+
二.解決方案
能夠移到數的絕對頂部和底部是非常有用的。
對於這個解決方案,不需要特殊的格式設置。目標隻是返回位於員工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)
總結
到此這篇關於MySQL中給定父行找到所有子行的文章就介紹到這瞭,更多相關MySQL給定父行找所有子行內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MySQL數據庫學習之排序與單行處理函數詳解
- MySQL數據庫學習之查詢操作詳解
- MySQL數據庫學習之去重與連接查詢詳解
- MySQL數據庫之union,limit和子查詢詳解
- postgresql影子用戶實踐場景分析