小编典典

返回多对多层次树中的所有节点

sql

但是我 没有 关闭(展平)表,一个孩子可以有很多父母,并且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)?

同样,假设2我期望第2、3、4、7、8行

鉴于6我希望第6和第10行

偶然的假阳性和结果中重复的行都是可以接受的。缺少行是不可接受的

在MSAccess和SQL Server 2000+中实施


阅读 189

收藏
2021-04-14

共1个答案

小编典典

由于您需要对节点可以具有多个父节点的数据进行建模,因此嵌套集/
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
2021-04-14