sql - 如何創建MySQL分層遞歸查詢


我有一個MySQL表,如下所示:

id | name        | parent_id
19 | category1   | 0
20 | category2   | 19
21 | category3   | 20
22 | category4   | 21
......

  

現在,我想要一個MySQL查詢,我只提供id [例如說'id = 19']然后我應該得到它的所有子ID [即 結果應該有ids '20,21,22'] ....而且,孩子們的等級不知道它可以變化....

另外,我已經有了使用for循環的解決方案.....如果可能的話,讓我知道如何使用單個MySQL查詢來實現相同的功能。

解決辦法

1.如果你在MySql 8上,那么使用遞歸where子句:

with recursive cte (id, name, parent_id) as (
  select     id,
             name,
             parent_id
  from       products
  where      parent_id = 19
  union all
  select     p.id,
             p.name,
             p.parent_id
  from       products p
  inner join cte
          on p.parent_id = cte.id
)
select * from cte;

where中指定的值應設置為要選擇所有后代的父級的CONNECT BY

2.對於不支持公用表表達式(最高版本為5.7)的MySql版本,您可以使用以下查詢來實現此目的:

select  id,
        name,
        parent_id 
from    (select * from products
         order by parent_id, id) products_sorted,
        (select @pv := '19') initialisation
where   find_in_set(parent_id, @pv)
and     length(@pv := concat(@pv, ',', id))

這是一個小提琴。

此處,where中指定的值應設置為要選擇所有后代的父級的CONNECT BY

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM