MySQL递归 - 检索所有子元素

时间:2012-01-11 15:07:40

标签: mysql recursion

5并有以下情况:

我有一个包含两列的数据库表:id(int)parentId(int)

让我说我的数据看起来像这样

id  parentId
1   null
2   1
3   1
4   3
5   3
6   4
7   4
8   6

现在我想编写一个查询,列出所有具有特定元素作为祖先的元素。怎么办呢?

例如,我希望所有具有4作为祖先的元素; 6,7,8

2 个答案:

答案 0 :(得分:0)

您的表格是adjacency list model分层数据的示例。这有众所周知的局限性,包括无法编写满足您需求的单个查询。 (您可以通过施加深度限制来执行单个查询,但这很痛苦。)

更好的结构是nested set model。有关嵌套集模型如何工作的好文章here,包括大量用于实现它的SQL代码。

答案 1 :(得分:0)

MySQL缺乏其他RDBMS所具有的分层功能,例如MSSQL 公用表表达式(CTE)和Oracle的 connect by ,这使得使用邻接列表变得简单而有效。因此,您必须执行以下操作:

Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)

希望这会有所帮助:)