如何从单个联接表展平层次结构

时间:2019-09-30 10:49:43

标签: mysql sql hierarchical-data mysql-5.7

我有一张桌子,描述了层次关系,没有大小限制。一个简单的例子是:

|ParentID |Child ID|
|1        |2       |
|2        |3       |
|1        |4       |
|5        |6       |

我需要一个查询,该查询针对给定的父母,给出所有孩子的完整列表,直到3,它只会返回4,而对于1它将返回2,3,4

我从SQL Server的许多年才开始接触MySQL,因此仍然习惯于其更高级的查询功能的工作方式。在SO上有一些示例,但是它们仅适用于深度固定的层次结构。我使用的是MySQL 5.7,可惜没有CTE。

1 个答案:

答案 0 :(得分:0)

经过更多谷歌搜索后,我根据以下问题提出了一些建议:How to create a MySQL hierarchical recursive query

select  distinct ChildID 
from    (select * from ParentChild) children,
        (select @ids := 1) top_level
where   find_in_set(ParentID, @ids)
and     length(@ids := concat(@ids, ',', ChildID))

我还没有在一些非常大的层次结构上对其进行过测试,但是到目前为止,它似乎可以满足我的要求。