2011年12月26日

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

片岡です。

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

2011年12月26日22:36 a-rank <kamio@xxxxx>:
> お世話になります。 上尾と申します。

>
> 環境
> 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


投稿者 xml-rpc : 2011年12月26日 22:47
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/107735
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。