[pgsql-jp: 25162] Re: 親子関係をSELECT する
Kenji Ono
ono @ fjct.fujitsu.com
2002年 3月 8日 (金) 16:37:58 JST
小野です。
早速で有難うございます。
> ;;; データの登録内容
> ;;; ・A001
> ;;; └A001-01
> ;;; |└A001-01-01
> ;;; | └A001-01-01-01
> ;;; └A001-02
> ;;; Oracle君の場合は、以下のような感じですむのですが・・・。
> ;;; SELECT *
> ;;; FROM eqt_node
> ;;; START WITH i_node =1
> ;;; CONNECT BY PRIOR i_prnt_node_cd = i_node ;
> ;;; PostgreSQLで実行するとQueryErrorになります。
>
> START WITH .. CONNECT BY PRIOR は、Oracle の拡張機能だからです。
またか。
今までOracleべったりだったので・・・。
> ;;; 期待する結果は、データ
> ;;; A001〜A001-01-01-01までが抽出できること。
>
> いくつか方法があります。
> その 1)
> ジュー・セルコ、プログラマのための SQL、
> ピアソン・エデュケーション
>
> その 2)
> PostgreSQL CookBook Pages
> http://www.brasileiro.net/postgres/cookbook/
本のほうは、今日本屋さんにいってみます。
> その 3)
> 全ノードがユニークに生成順を識別できるならば、ノードの親の生成順とノー
> ドの生成順でソートすることで、幅探索の結果順で SELECT 可能です。
すみません。
知識が浅いので、理解できません。(^^;;
幅検索とは具体的にどのようにするのでしょうか。
> その 4)
> 7.0 か 7.2 ならば再帰的なユーザ定義関数で、Oracle と同じ順の
> 深さ優先行きがけ順で探索できます。
>
> 7.1 では Function Manager のバグのために再帰的な関数が使えません。
7.1なので残念です。
お手数ですが、再度よろしくお願いします。
pgsql-jp メーリングリストの案内