2013-03-13 43 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