但是我 没有 关闭(展平)表,一个孩子可以有很多父母,并且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我将如何编写单个查询以返回所有行(获取所有后代的Relationips)?
1
同样,假设2我期望第2、3、4、7、8行
2
鉴于6我希望第6和第10行
6
偶然的假阳性和结果中重复的行都是可以接受的。缺少行是不可接受的
在MSAccess和SQL Server 2000+中实施
由于您需要对节点可以具有多个父节点的数据进行建模,因此嵌套集/ MPTT解决方案将不起作用。
您将创建一个附加表,该表为每个祖先的后代保存成对的项目(反之亦然):
识别码 1 2 1 6 1 4 1 8 1 7 1 3 1 5 1 9 2 4 2 8 2 3 2 5 2 9 4 3 4 5 4 9 3 5 3 9 6 7
然后,您将使用联接来获取所需的项目:
SELECT * FROM Tbl INNER JOIN Closure ON Tbl.ID=Closure.DesID WHERE Closure.AncID = 2