PostgreSQL: рекурсивный обход дерева вверх в PostgreSQL
есть таблица вида
[id] [name] [parent]
В поле parent
указывается name
родителя.
Если у записи нет родителя, то parent = name
.
Необходимо зная id
записи найти всех его детей, а также предков и "племянников", т.е. полностью обойти дерево в обе стороны.
Вот таким запросом:
WITH RECURSIVE tmp_t AS (
-- стартовая часть рекурсии
SELECT id, name, parent
FROM tree_t
WHERE id = <id записи>
UNION ALL
-- рекурсивная часть
SELECT t.id, t.name, t.parent
FROM tree_t AS t
JOIN tmp_t ON t.parent = tmp_t.name AND t.parent <> t.name
)
SELECT tmp_t.id
FROM tmp_t;
я могу найти только все дочерние элементы.
А как найти все элементы от которых можно добраться до указанного id
?
P.S.
И второй вопрос - а как подняться вверх и найти корень дерева? Т.е. sql запрос должен выдать id
самого старшего родителя.