【发布时间】:2011-03-08 19:32:00
【问题描述】:
类似于这个问题: How do I query for all the nodes between two nodes in a tree?
但是我没有有一个闭包(扁平)表,一个孩子可以有很多父母,ID遍历不一定是有序的。嵌套深度没有限制。
假设循环引用是不可能的... 我想返回遍历层次结构所需的所有行。
假设如下表:
ParentID ID RowNumber(Reference)
1 2 1
2 4 2
4 3 3
3 5 4
1 6 5
6 7 6
2 8 7
3 9 8
1 8 9
6 8 10
鉴于1,我将如何编写一个查询来返回所有行(获取所有后代的关系)?
同样,给定 2 我希望第 2、3、4、7、8 行
鉴于 6 我希望第 6 行和第 10 行
偶尔的误报是可以接受的,因为结果中有重复的行。缺少行是不可接受的
在 MSAccess 和 SQL Server 2000+ 中实现
【问题讨论】:
-
澄清一下,你的意思是一个孩子可以有很多父母,而不是很多祖先,对吧?我之所以问,是因为您发布的示例数据没有显示任何有多个父母的孩子,尽管 4、3、5、7 有多个祖先。
-
一个孩子可以有许多父母和许多后代。我将添加更多示例
-
另外,您希望基于示例数据获得的示例查询结果将非常有帮助。请务必使用包含所有可能复杂性的样本数据(例如,有多个父母的孩子等)。
-
最大深度是多少,如果有的话?您不能在查询 (SQL Server 2000)、存储过程中执行此操作 - 也许
-
@Richard: "嵌套深度没有限制"
标签: sql sql-server ms-access many-to-many hierarchical-data