Twoje myślenie jest złe dla SQL. Nie myśl w kategoriach pętli, warunków i zmiennych; zamiast tego zastanów się, jak opisać żądane dane. Trudne jest to, że chcesz, aby zapytanie odnosiło się do własnych wyników i właśnie to rekurencyjne CTE są dla:
Szukasz czegoś takiego:
with recursive path as (
select id, parent from T where id = 4
union all
select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path
To da ci to:
id | parent
----+--------
4 | 2
2 | 1
1 |
a następnie możesz umieścić to z powrotem w ścieżce, która byłaby bardziej powiązana lista (lub cokolwiek jest odpowiednie w twoim języku klienta) poza bazą danych. Nie musisz uwzględniać parent
oczywiście, ale uwzględnienie go pomoże ci naprawić „wskaźniki”.