91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

讓MySQL中單句實現無限層次父子關系查詢的方法

發布時間:2020-08-27 11:38:45 來源:億速云 閱讀:1165 作者:小新 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關讓MySQL中單句實現無限層次父子關系查詢的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

在 SQL Server 中,使用 CTE 表達式很容易做到無限層次父子關系查詢;在不支持CTE表達式的版本中,借助函數遞歸也可以輕松實現。
在 MySQL 中,這個需求的實例稍顯復雜, MySQL 中沒有支持遞歸的查詢,沒有表值函數,函數不支持遞歸,所以通常都是用循環實現,顯得比較別扭。今天看到一個用單條語句實現的遞歸查詢,想法獨特,分享一下。

相關mysql視頻教程

表結構和數據

CREATE TABLE table1(id int, name varchar(10), parent_id int); 
INSERT table1 VALUES 
(1, ‘Home’,        0), 
(2, ‘About’,       1), 
(3, ‘Contact’,     1), 
(4, ‘Legal’,         2), 
(5, ‘Privacy’,      4), 
(6, ‘Products’,   1), 
(7, ‘Support’,     2);

查詢 id = 5 的所有父級

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @id as _id, 

        (   SELECT @id := parent_id 

            FROM table1 

            WHERE id = @id 

        ) as _pid, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @id := 5, @l := 0 ) b 

    WHERE @id > 0 
) ID, table1 DATA 
WHERE ID._id = DATA.id 
ORDER BY level;

根據這個父級查詢方法,很容易可以寫出查所有子級的,下面的查詢 id=2 的所有子級

SELECT ID.level, DATA.* FROM( 

    SELECT 

        @ids as _ids, 

        (   SELECT @ids := GROUP_CONCAT(id) 

            FROM table1 

            WHERE FIND_IN_SET(parent_id, @ids) 

        ) as cids, 

        @l := @l+1 as level 

    FROM table1, 

        (SELECT @ids :=’1’, @l := 0 ) b 

    WHERE @ids IS NOT NULL 
) id, table1 DATA 
WHERE FIND_IN_SET(DATA.id, ID._ids) 
ORDER BY level, id

關于讓MySQL中單句實現無限層次父子關系查詢的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南充市| 濮阳市| 佛学| 五河县| 霍山县| 嘉定区| 和林格尔县| 彰化县| 奉节县| 嫩江县| 霍林郭勒市| 景东| 招远市| 安徽省| 大厂| 沙洋县| 明光市| 满洲里市| 南陵县| 绵阳市| 磐安县| 云浮市| 桃源县| 米泉市| 沈阳市| 炎陵县| 株洲市| 曲水县| 临邑县| 钟祥市| 霍山县| 奉化市| 武乡县| 疏附县| 萨嘎县| 沙洋县| 治多县| 诸城市| 吴旗县| 沾化县| 和田市|