MySQL递归-检索所有子元素

MySQL递归-检索所有子元素,mysql,recursion,Mysql,Recursion,5和具有以下场景: 我有一个包含两列的数据库表:idint,parentidit 假设我的数据是这样的 id parentId 1 null 2 1 3 1 4 3 5 3 6 4 7 4 8 6 现在我想写一个查询,列出所有以特定元素为祖先的元素。如何做到这一点 例如,我想要所有以4为祖先的元素;6,7,8.您的表是分层数据的一个示例。这有众所周知的局限性,包括无法编写满足您需要的单个查询。您可以通过设置深度限制来执行单个查询,但这很痛苦 一个更好的结构应该

5和具有以下场景:

我有一个包含两列的数据库表:idint,parentidit

假设我的数据是这样的

id  parentId
1   null
2   1
3   1
4   3
5   3
6   4
7   4
8   6
现在我想写一个查询,列出所有以特定元素为祖先的元素。如何做到这一点


例如,我想要所有以4为祖先的元素;6,7,8.

您的表是分层数据的一个示例。这有众所周知的局限性,包括无法编写满足您需要的单个查询。您可以通过设置深度限制来执行单个查询,但这很痛苦


一个更好的结构应该是一个。有一篇很好的文章介绍了嵌套集模型的工作原理,其中包含了大量用于实现它的SQL代码。

MySQL缺少其他RDBMS所具有的层次结构特性,例如MSSQL公共表表达式CTE和Oracle的connect,通过这些特性,可以简单高效地处理邻接列表。因此,您必须执行以下操作:


希望这有帮助:

可能重复代码的重新格式化,但有些部分没有意义:看起来在5之前缺少文本,并且有以下内容?重复:并且在MySQL中不可能使用单个查询进行完全递归查询。您可以使用自联接对指定数量的级别进行模拟,但不可能使用通用的单查询解决方案。其他DBMS有一个connect by prior类型,它允许单查询递归。