mysql - 如何从单个连接表中展平层次结构
问题描述
我有一个表,它描述了没有大小限制的层次关系。一个简单的例子是:
|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。
解决方案
经过一番谷歌搜索后,我根据这个问题想出了一些东西:如何创建 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))
我还没有在一些非常大的层次结构上测试它,但到目前为止它似乎做了我想要的。
推荐阅读
- docker - 来自守护进程的错误响应:找不到网络 ehmnzctsw789v3kjher5rsil6 错误:无法启动容器:mfa-bionix-db-mongo-windows
- python - python请求引发了SSLError,如何解决?
- c++ - C++ 中变量的初始化:= vs {}
- python - 使用 setup.py 构建 Python 多阶段 Docker
- python - 使用并发期货通过多处理运行多个视频
- android - 在材料日历视图中将文本添加到日期
- r - 在 R 中实现 Keras 进行图像分类时出错
- powershell - 通过 Bamboo 的 cmake 命令问题
- putty - 关于腻子和自动登录的问题
- symfony - Entity 中 services.yaml 中的 Symfony 访问参数