2013-03-13 1 views
0

В настоящее время я создаю FamilyTree с моей базой данных. Я нашел запрос для построения вывода на основе семейства, но теперь я хочу немного дополнительной функции. Но я, честно говоря, не знаю, с чего начать.Backtracking FamilyTree SQL

Выход FamilyTree можно увидеть здесь: http://data.stackexchange.com/stackoverflow/query/84004/family-tree-sql-query

Так что мой вопрос, что мне делать, если я хочу, чтобы вернуться назад в «старый» человеке в иерархии людей?

Fx: Какой отец является доплемом для ID 8?

Читая выход, я могу сказать, что ответ 1: 8 -> 5 -> 4 -> 1

+1

Было бы лучше, чтобы добавить свой пример http://sqlfiddle.com. Проводник данных стека Exchange предназначен для запроса экспорта данных Stack Exchange. – squillman

+0

Отмечено для будущих вопросов :) – Behrens

ответ

2

Я хотел бы предложить, чтобы сделать это с КТР. Что-то, как это будет работать:

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