[pgsql-jp: 38448] 階層問い合わせについて

kuma kuma @ fgy.co.jp
2007年 5月 25日 (金) 21:07:04 JST


お世話になります、熊田です。

8.1.x系にcontrib/tablefuncを入れてconnectby()関数で階層問い合わせを行っ
ています。

以下、サンプルの通り環境を作り実行しました。
-----------------------------------------------------------------------
CREATE TABLE connectby_tree(keyid text, parent_keyid text, pos int);
INSERT INTO connectby_tree VALUES('row1',NULL, 0);
INSERT INTO connectby_tree VALUES('row2','row1', 0);
INSERT INTO connectby_tree VALUES('row3','row1', 0);
INSERT INTO connectby_tree VALUES('row4','row2', 1);
INSERT INTO connectby_tree VALUES('row5','row2', 0);
INSERT INTO connectby_tree VALUES('row6','row4', 0);
INSERT INTO connectby_tree VALUES('row7','row3', 0);
INSERT INTO connectby_tree VALUES('row8','row6', 0);
INSERT INTO connectby_tree VALUES('row9','row5', 0);

SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row1',
0, '~')
 AS t(keyid text, parent_keyid text, level int, branch text);
 keyid | parent_keyid | level |          branch
-------+--------------+-------+--------------------------
 row1  |              |     0 | row1
 row2  | row1         |     1 | row1~row2
 row4  | row2         |     2 | row1~row2~row4
 row6  | row4         |     3 | row1~row2~row4~row6
 row8  | row6         |     4 | row1~row2~row4~row6~row8
 row5  | row2         |     2 | row1~row2~row5
 row9  | row5         |     3 | row1~row2~row5~row9
 row3  | row1         |     1 | row1~row3
 row7  | row3         |     2 | row1~row3~row7
-----------------------------------------------------------------------

ここで各階層毎にソートを行いたいのですが可能なのでしょうか。
parent_keyid(親キー)に同じ値を持つrow2,row3などをkeyidやposなどでソー
トをした結果が取得したいのです。

connectby()に関して情報があまり見当たりませんので、分かる方がいればお願
いいたします。
また、connectby()と使用せずに、階層問い合わせ同様の取得方法がありました
らお願いいたします。




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