回溯FamilyTree SQL

时间:2013-03-13 15:24:57

标签: sql-server-2008 sql-server-2008-r2

我目前正在使用我的数据库构建FamilyTree。 我找到了一个基于familytree构建输出的查询,但现在我想要一些额外的功能。但老实说,我不知道从哪里开始。

可在此处查看FamilyTree输出:http://data.stackexchange.com/stackoverflow/query/84004/family-tree-sql-query

所以我的问题是,如果我想回溯一个人群中“最老的”人物,我该怎么办?

Fx:哪个父亲是ID 8的顶级人物?

通过阅读输出,我可以说答案是1:8 - > 5 - > 4 - > 1

1 个答案:

答案 0 :(得分:2)

我建议用CTE做。像这样的东西会起作用:

WITH SearchHierarchy AS (
    SELECT ID, Name, FatherID, 0 AS Level
    FROM FamilyTree
    WHERE ID = 8
    UNION ALL
    SELECT a.ID, a.Name, a.FatherID, Level + 1
    FROM FamilyTree a
    INNER JOIN SearchHierarchy b ON a.ID = b.FatherID
    )
SELECT TOP 1 ID, Name
FROM SearchHierarchy
ORDER BY LEVEL DESC

对于工作演示:On SQLFiddle