如何讓MySQL中單句實現無限層次父子關係查詢

來源:互聯網
上載者:User
在 SQL Server 中,使用 CTE 運算式很容易做到無限層次父子關係查詢;在不支援CTE運算式的版本中,藉助函數遞迴也可以輕鬆實現。
在 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中單句實現無限層次父子關係查詢,更多相關內容請關注php中文網。

相關推薦:

帶進度的SQL Server FileStream如何存取

當忘記 SQL Server 管理員密碼該如何處理

淺析MySQL中concat以及group_concat的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.