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

実際のデモ: On SQLFiddle

于 2013-03-13T19:39:42.637 に答える