さて、あなたの問題は、正規化されていないテーブルデザインを使用していることのようです。指定されたID
の場合 常に同じParentID
、その関係をこれらすべての行で個別に示すべきではありません。
より良い設計は、ID
を使用して親子関係を示す単一のテーブルを持つことです。 主キーとして、およびID
のマッピングを示す2番目のテーブル ObjectID
へ 、ここでは、両方の列が一緒になって主キーを構成すると想定しています。次に、最初のテーブルに対して階層クエリを適用し、その結果を他のテーブルに結合して、各行に関連するオブジェクトを取得します。
現在のテーブル構造でこれをエミュレートできます...
with parent_child as (select distinct id, parent_id from table),
tree as (select id, parent_id from parent_child
start with parent_id = 0
connect by prior id = parent_id )
select id, table.parent_id, table.object_id
from tree join table using (id)