0

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

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

所以我的问题是,如果我想回溯个人层次结构中“最年长”的人,我该怎么办?

Fx:哪位父亲是ID 8的顶级?

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

4

1 回答 1

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

对于工作演示:在 SQLFiddle

于 2013-03-13T19:39:42.637 回答