mysql - 如何找到层次树中的所有子节点

标签 mysql sql hierarchical-data

我有一个由 fk parentId 自引用的表。
给定一个 id,我需要提取它的所有子节点。
我知道该图正好具有三个级别:root、middleNode、leaf
所以我尝试了这个:

SELECT * 
FROM table AS root 
LEFT JOIN table AS middle
  ON middle.parentId = root.id
LEFT JOIN table AS leaf
  ON leaf.parentId = middle.id
WHERE root.id = 1

但这样我就没有为每个节点排...

此外,此实现没有考虑两件事:

  1. 它链接到3个级别的结构
  2. 在我看来,如果我在树的中间搜索,这似乎不是最好的解决方案

最佳答案

对于 3 个级别,你可以拥有它

    SELECT * FROM 
-- root
(
SELECT * 
FROM your_table WHERE id = 1 
) as root
UNION ALL
-- level1
(
SELECT * FROM your_table WHERE parentId = 1 ) 
)
UNION ALL
-- level2
(
SELECT * FROM your_table WHERE parentId IN (SELECT id FROM your_table WHERE parentId = 1 ) 
)

但对于更深的深度,我建议你实现常见的方法,例如嵌套集模型(需要添加额外的列),请take a look on this

关于mysql - 如何找到层次树中的所有子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642230/

相关文章:

mysql - 在组上选择 MAX() 不会返回相应的同级列

mysql - 索引中的漏洞是否会以某种方式影响数据库?

sql - 在一个sql命令中从一个数据库表中选择多个计数

python - 如何使用 ETE Toolkit (Python) 更改节点标签上的字体方向

mysql - SQL - OUTER JOIN a UNION-ed 表

PHP 我的管理员 no 用于导入 CSV 文件的忽略重复行选项

sql - 在 PostgreSQL 中索引空值

php - 带条件的 MySQL 查询

mysql - 获取类别级别

c# - 如何使用 hierarchyid 数据类型查找父级