【问题标题】:mysql recursive query from node of interest to root node从感兴趣节点到根节点的mysql递归查询
【发布时间】:2020-03-20 09:02:12
【问题描述】:

我有一个mysql表如下:

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

我如何编写一个递归 mysql 查询来获取从输入节点到根节点的所有节点。 例如:如果输入是category3,输出应该是category3、category2和category1

【问题讨论】:

    标签: mysql hierarchical-data recursive-query


    【解决方案1】:

    我们可以尝试使用以下递归分层查询:

    WITH RECURSIVE cte (id, name, parent_id) AS (
        SELECT     id,
                   name,
                   parent_id
        FROM       yourTable
        WHERE      parent_id IS NULL
        UNION ALL
        SELECT     p.id,
                   p.name,
                   p.parent_id
        FROM       yourTable p
        INNER JOIN cte
                ON p.parent_id = cte.id
        WHERE      cte.name <> 'category3'
    )
    
    SELECT GROUP_CONCAT(name ORDER BY id DESC) AS names FROM cte;
    

    这个输出:

    category3,category2,category1
    

    Demo

    这里的想法是短路递归以停止在父级为category3 的点。如果 CTE 的递归部分达到这一点,则意味着它已经 低于category3 级别,因此应该停止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多