从感兴趣节点到根节点的mysql递归查询
Posted
技术标签:
【中文标题】从感兴趣节点到根节点的mysql递归查询【英文标题】:mysql recursive query from node of interest to root node 【发布时间】: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
【问题讨论】:
【参考方案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
级别,因此应该停止。
【讨论】:
以上是关于从感兴趣节点到根节点的mysql递归查询的主要内容,如果未能解决你的问题,请参考以下文章