Uw denken is verkeerd voor SQL. Denk niet in lussen en voorwaarden en variabelen; denk in plaats daarvan na over hoe u de gewenste gegevens kunt beschrijven. Het lastige is dat je wilt dat de query verwijst naar zijn eigen resultaten en dat is wat recursieve CTE's zijn voor:
Je zoekt zoiets als dit:
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
Dat geeft je dit:
id | parent
----+--------
4 | 2
2 | 1
1 |
en dan kun je dat weer samenvoegen in een pad dat meer gekoppeld zou zijn (of wat dan ook geschikt is in de taal van je klant) buiten de database. U hoeft parent
niet op te nemen natuurlijk, maar als je het toevoegt, kun je de "aanwijzers" verbeteren.