2013-03-13 49 views
0

我目前正在用我的数据库构建FamilyTree。 我发现了一个查询来构建基于familytree的输出,但现在我想要一个额外的功能。但我真的不知道从哪里开始。回溯FamilyTree SQL

的谱系图输出可以在这里看到:http://data.stackexchange.com/stackoverflow/query/84004/family-tree-sql-query

所以我的问题是,我该怎么办,如果我想走回头路“最老”的人在一个人的层次结构?

Fx:哪个父亲是ID 8的顶层?

通过读取输出,我可以告诉答案是1:8 - > 5 - > 4 - > 1

+1

这将会是更好的例子添加到http://sqlfiddle.com。堆栈Exchange数据资源管理器用于查询堆栈交换数据导出。 – squillman 2013-03-13 15:27:10

+0

注意到将来的问题:) – Behrens 2013-03-14 09:33:09

回答

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

+0

完美!谢谢 :) – Behrens 2013-03-14 09:37:33