你考虑过使用标签方案吗?外面有很多这样的人。其中最常见的是包含标记方案。您只需像这样为树中的每个节点分配一个节点标签
这些标签可以使用树的一个前序遍历(如果使用堆栈)分配给每个节点。这些标签可以作为新属性添加到表中
start
,
end
. 一旦计算出标签,就需要创建这样的索引
table(start, end, pk_primarykey)
和
table(childid, start, end)
. 如果要查找某个节点的子代,请处理:
select t2.pk_primarykey
from #parent_child_relationships t1
join #parent_child_relationships t2 on t2.start > t1.start and t2.end < t1.end
where t1.childid = 571951
或者更容易,如果你有
开始
终止
需要其子体的节点的值(例如(100200)),则查询可以是
select pk_primarykey
from #parent_child_relationships on start > 100 and t2.end < 200