MySql8 WITH RECURSIVE遞歸查詢父子集的方法
背景
開發(fā)過程中遇到類似評(píng)論的功能是,需要時(shí)用查詢所有評(píng)論的子集。不同數(shù)據(jù)庫中實(shí)現(xiàn)方式也不同,本文使用Mysql數(shù)據(jù)庫,版本為8.0
- Oracle數(shù)據(jù)庫中可使用START [Param] CONNECT BY PRIOR
- Mysql 中需要使用 WITH RECURSIVE
需求
找到name為張三的孩子和孫子,pid為當(dāng)前記錄的父id,如張三兒子的pid為張三的id,以此類推。
引入
計(jì)算1到100的累加的結(jié)果。 WITH RECURSIVE t(n) AS ( //t為我們結(jié)果表,n為字段,可以只指定表明不指定字段 VALUES (1) //遞歸的開始,此時(shí)可理解為t表字段n只有一條記錄 1 UNION ALL SELECT n+1 FROM t WHERE n < 100 /*這里產(chǎn)生的結(jié)果為 2 ,此時(shí)t表的字段n有兩條記錄分別為1,2 * 3 * ... * 100 */ ) SELECT sum(n) FROM t; //對(duì)字段n求和
父求子
WITH RECURSIVE temp AS ( // 將結(jié)果表命名為temp SELECT * FROM resource r WHERE r.name ='張三' //查詢出父id這條記錄,此時(shí)這條記錄已存在temp表中 ,如圖1-1 UNION ALL /*這時(shí)要注意,下面這條sql是獲取的期望結(jié)果中的后兩條記錄(不包含第一條) *注意where后的條件,我們使用temp表中的唯一一條記錄的id關(guān)聯(lián)resource表中的pid *僅當(dāng)temp第一條記錄匹配不到resource表中的pid時(shí)才會(huì)對(duì)temp的第二條記錄id進(jìn)行匹配 */ SELECT r.* FROM resource r,temp t WHERE t.id = r.pid )select * from temp
子查父
WITH recursive temp AS ( SELECT * FROM resource r WHERE r.name ='張三孫子' UNION ALL //已知的是子集,所以我們需要通過temp的pid匹配resource的id SELECT r.* FROM resource r,temp t WHERE t.pid = r.id )select * from temp
到此這篇關(guān)于MySql8 遞歸查詢父子集的方法的文章就介紹到這了,更多相關(guān)MySql8 遞歸查詢父子集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL學(xué)習(xí)第一天 第一次接觸MySQL
這篇文章是學(xué)習(xí)MySQL的第一篇文章,開啟了探究MySQL的奇妙旅程,內(nèi)容主要是對(duì)MySQL的基礎(chǔ)知識(shí)進(jìn)行學(xué)習(xí),了解,感興趣的小伙伴們可以參考一下2016-05-05Mysql查詢數(shù)據(jù)庫連接狀態(tài)以及連接信息詳解
這篇文章主要給大家介紹了關(guān)于Mysql查詢數(shù)據(jù)庫連接狀態(tài)以及連接信息的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04mysql函數(shù)之常見數(shù)學(xué)函數(shù)示例詳解
文章總結(jié)了多個(gè)數(shù)學(xué)和字符串處理函數(shù)的功能和使用示例,包括格式化數(shù)字、計(jì)算絕對(duì)值、平方根、取整、生成隨機(jī)數(shù)、四舍五入、截?cái)?、返回符?hào)、冪運(yùn)算以及最大值最小值的計(jì)算,感興趣的朋友一起看看吧2025-03-03mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)
這篇文章主要介紹了mysql 5.7.20常用下載、安裝和配置方法及簡單操作技巧(解壓版免安裝)的相關(guān)資料,需要的朋友可以參考下2017-11-11Windows下MySQL?8.0.29?安裝和刪除圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows下MySQL?8.0.29?安裝和刪除圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07MySQL下將一個(gè)表的數(shù)據(jù)插入到另外一個(gè)表的實(shí)現(xiàn)語句
開發(fā)中,我們經(jīng)常需要將一個(gè)表的數(shù)據(jù)插入到另外一個(gè)表,有時(shí)還需要指定導(dǎo)入字段,雖然這個(gè)實(shí)現(xiàn)起來非常簡單,但是還是會(huì)困擾許多新手,因此專門發(fā)一篇文章備查。2009-09-09MySQL存儲(chǔ)過程的權(quán)限問題小結(jié)
這篇文章主要介紹了MySQL存儲(chǔ)過程的權(quán)限問題小結(jié)及mysql 創(chuàng)建存儲(chǔ)過程權(quán)限問題,感興趣的朋友一起看看吧2018-04-04將圖片保存到mysql數(shù)據(jù)庫并展示在前端頁面的實(shí)現(xiàn)代碼
這篇文章主要介紹了將圖片保存到mysql數(shù)據(jù)庫并展示在前端頁面,本文給的大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05MySQL中日期和時(shí)間戳互相轉(zhuǎn)換的函數(shù)和方法
這篇文章主要介紹了MySQL中日期和時(shí)間戳互相轉(zhuǎn)換的函數(shù)和方法,本文分別講解了時(shí)間戳轉(zhuǎn)換成日期的方法和把日期轉(zhuǎn)換為時(shí)間戳的方法,需要的朋友可以參考下2015-06-06