我有一个包含两列的表:mother - node 该表构成层次结构的基础。母亲指的是一个节点。 每个节点可以有多个母亲,每个母亲可以有多个 child 。这是通过多行来完成的。 如果 mother = NULL,则该节点是顶级节点。可以有多个顶级节点,一个节点可以既是顶级节点又是另一个节点的子节点。 例如:
INSERT INTO MYTABLE VALUES(NULL, 2)
INSERT INTO MYTABLE VALUES(1, 2)
我现在正在构建一个需要知道层次结构最大深度的过程。假设节点 E 是节点 D 的子节点,而节点 D 是节点 C 的子节点。 节点 C 是顶级节点,也是节点 B 的子节点,节点 B 是节点 A 的子节点 节点 A 只是顶级节点。 如果我们说节点 A 的深度 = 0。那么在这种情况下节点 E 的深度应该是 4。
有没有人知道我如何建立一个能为我找到这种深度的陈述? 它必须找到表中每个节点的最大深度,然后返回这些节点的最大值。
谢谢!
顺便说一句,使用 SQL Server 2008。
编辑:
它只是感兴趣的表的绝对最大深度。不是单个节点的深度。
最佳答案
试试这个,它会找到层次结构的所有底层
declare @mytable table(id int, parent_id int)
INSERT INTO @MYTABLE VALUES(1, NULL)
INSERT INTO @MYTABLE VALUES(2, 1)
INSERT INTO @MYTABLE VALUES(3, 1) --*
INSERT INTO @MYTABLE VALUES(4, 2)
INSERT INTO @MYTABLE VALUES(5, 4) --*
;with a as
(
select
id,
parent_id,
1 lvl
from @mytable
where parent_id is null
union all
select
b.id,
b.parent_id,
lvl+1
from @mytable b
join a on a.id = b.parent_id
)
select
a.id,
a.parent_id,
a.lvl
from a
left join a b on a.id = b.parent_id
where b.id is null
option (maxrecursion 0)
关于sql - 查找多父层次结构的深度 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7951374/