小编典典

如何查询树中两个节点之间的所有节点

sql

我有一个分层的数据库结构,例如列,ID并且PARENT_ID为每行定义,顶层的行有一个NULL PARENT_ID

我已将此表中的所有关系展平到另一个表中,例如,如果在祖父母,父母,孙子的单个层次结构中有三个记录,则将有3个记录:

**ANCESTOR, DESCENDANT**
grantparent, parent
grandparent, grandchild
parent, grandchild

无需执行分层查询来确定孙子是祖父母的后代,我可以简单地检查(grandparent, grandchild)该扁平化表中是否存在记录。

我的问题是,使用这个展平的表,我如何最有效地返回两个节点之间的所有记录。使用带有grandparentgrandchild作为参数的示例,如何获取(grandparent, parent)记录。

我不想使用分层查询来解决此问题…我想知道是否有可能在没有任何联接的情况下做到这一点。


阅读 189

收藏
2021-04-15

共1个答案

小编典典

SELECT  *
FROM    mytable
WHERE   descendant = @descendant
        AND hops < 
        (
        SELECT  hops
        FROM    mytable
        WHERE   descendant = @descendant
                AND ancestor = @ancestor
        )

当@ancestor不是真正@descendant的祖先时,这将自动处理。

创建索引(descendant, hops)以使其快速运行。

2021-04-15