MySQL中給定父行找到所有子行的解決方案
前言
備注:測試數(shù)據(jù)庫版本為MySQL 8.0
如需要scott用戶下建表及錄入數(shù)據(jù)語句,可參考:
一.需求
找到直接及簡介(即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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql數(shù)據(jù)庫常見的優(yōu)化操作總結(jié)(經(jīng)驗分享)
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫常見的優(yōu)化操作,文章總結(jié)的都是個人日常開發(fā)使用mysql數(shù)據(jù)庫的經(jīng)驗所得,其中包括Index索引、少用SELECT*、EXPLAIN SELECT以及開啟查詢緩存等相關(guān)資料,相信會對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-04-04
MySQL主從復(fù)制之半同步semi-sync?replication
這篇文章主要介紹了MySQL主從復(fù)制之半同步semi-sync?replication,半同步相對于異步復(fù)制而言,提高了數(shù)據(jù)的安全性,同時也造成了一定程度的延遲,這個延遲最少是一個TCP往返的時間。所以,半同步復(fù)制最好在低延時的網(wǎng)絡(luò)中使用,下文詳細內(nèi)容,需要的小伙伴可以參考一下2022-02-02

