[pgsql-jp: 41016] Re: 家系図を取り出すSQL

Hiroki Kataoka kataoka @ interwiz.jp
2011年 12月 26日 (月) 22:47:22 JST


片岡です。

そのバージョンでは再帰SQLが使えないので純粋にSQL文で実現するのは難しい(無理?)ですね。
ですがユーザ定義関数を使うことはできますから、親をSELECTするユーザ定義関数を再帰呼び出しすることで実現できるそうですね。
ヒントだけですみません。

2011年12月26日22:36 a-rank <kamio @ a-rank.net>:
> お世話になります。 上尾と申します。
>
> 環境
> php5.16
> PostgreSQL 8.1.11
>
> 下記のようなテーブルから家系図を取り出す方法を考えているのですが
> 効率の良い方法が見つからず悩んでいます。
> このような構造から階層の深さを指定して一発で取り出すSQLは無いのでしょうか?
>
> 子どもID   母親ID            父親ID
> M               A               B
> N               C               D
> O               E               F
> P               G               H
> Q               I               J
> R               K               L
> S               M               O
> T               N               P
> U               Q               R
> V               S               U
>
> 例えば子どもID(V)を起点に祖父母迄を抽出すると
> 起点の子供:V
> 両親:S、U
> 祖父母:M、O、Q、R
> 曾祖父母:A、B、E、F、I、J、K、L
> となりますがこのようなデータを一発で取得する方法は無いのでしょうか?
>
> PostgreSQL 8.4からは再帰SQLと言うのが使えるようですが現在の
> PostgreSQLのバージョンアップは行えません。
>
> connectby関数と言うのを見つけましたが親IDとして指定できるカラムが1つ
> だけなようなので今回のように両親(必ず親が二人いる)場合はうまく使えない
> のかなと思っていますが違うのでしょうか?
>
> PHPの方で再帰的にSQLを呼び出せば出来るのは分かるのですがパフォーマンス的に
> 悪そうなのでPostgreSQL側で処理したいなあと考えています。
> よろしくお願いいたします。
>



-- 
Hiroki Kataoka


pgsql-jp メーリングリストの案内