あなたの考えはSQLにとって間違っています。ループや条件、変数の観点から考えないでください。代わりに、必要なデータを説明する方法を考えてください。トリッキーな部分は、クエリがそれ自体の結果を参照するようにしたいということです。それが再帰CTE 対象:
あなたはこのようなものを探しています:
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
それはあなたにこれを与えるでしょう:
id | parent
----+--------
4 | 2
2 | 1
1 |
次に、データベースの外部でよりリンクされたリスト(またはクライアント言語で適切なもの)になるパスにそれを戻すことができます。 parent
を含める必要はありません もちろんですが、それを含めると「ポインタ」を修正するのに役立ちます。