1

私は Postgres 9.1 を使用しており、ファミリー ツリー階層を含むテーブルがあります。このテーブルは親と呼ばれ、リレーションシップの親用と子用の 2 つの外部キーがあります。次の SQL クエリ (主に Postgres のドキュメントから盗用) は機能しますが、ツリーを上下に移動します。

with recursive temp(child, parent, depth, path, cycle) as
        (select child, parent, 1, array[child], false
         from parents
         where parent = 149

         union all

         select parents.child, parents.parent, temp.depth + 1, path || parents.child, parents.child = any(path)
         from temp, parents
         where parents.child = temp.parent)
    select distinct c1.name as child_name, c2.name as parent_name
    from temp
    join people c1 on temp.child = c1.id
    join people c2 on temp.parent = c2.id;

親 149 は、トラバーサルのルート ノードです。

出力には、1 世代の子と 149 のすべての世代の先祖が含まれます。理想的には、クエリは家系図をたどり、先祖の世代はありません。

4

1 に答える 1