Vaše uvažování je pro SQL špatné. Nemyslete na smyčky, podmínky a proměnné; místo toho přemýšlejte o tom, jak popsat požadovaná data. Záludná část je, že chcete, aby dotaz odkazoval na své vlastní výsledky, a to je to, co rekurzivní CTE jsou pro:
Hledáte něco takového:
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 vám dá toto:
id | parent
----+--------
4 | 2
2 | 1
1 |
a pak to můžete dát dohromady do cesty, která by byla více propojená (nebo cokoli, co je vhodné pro váš klientský jazyk) mimo databázi. Nemusíte uvádět parent
samozřejmě, ale jeho zahrnutí vám pomůže opravit "ukazatele".