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

a-rank kamio @ a-rank.net
2011年 12月 26日 (月) 22:36:22 JST


お世話になります。 上尾と申します。

環境
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側で処理したいなあと考えています。
よろしくお願いいたします。



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