首页 > 解决方案 > 如何从单个连接表中展平层次结构

问题描述

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

|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。

标签: mysqlsqlhierarchical-datamysql-5.7

解决方案


经过一番谷歌搜索后,我根据这个问题想出了一些东西:如何创建 MySQL 分层递归查询

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))

我还没有在一些非常大的层次结构上测试它,但到目前为止它似乎做了我想要的。


推荐阅读