2010年10月 6日

[pgsql-jp: 40439] Re:階層問い合わせの使い方について

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

以前、表題の件でご質問させて頂いた時に8.4 以降であればと言う事で以下のよ
うに教えていただきましたが、データの取得順を階層毎(?)にするにはどのよ
うにすればよろしいのでしょうか?
connectby であれば
1500 | 1000 | お菓子
1510 | 1500 | 和菓子

1511 | 1510 | 生和菓子
1512 | 1510 | まんじゅう
1513 | 1510 | ようかん
1514 | 1510 | せんべい
1515 | 1510 | 最中
1520 | 1500 | 洋菓子
1521 | 1520 | プリン
1522 | 1520 | ゼリー
1523 | 1520 | ケーキ
1524 | 1520 | パイ
1525 | 1520 | カステラ
のようになるのですが

> connectby 関数はほとんど使ったことがないので connectby 関数でどう書く
> かはすぐには分かりませんが、8.4 以降であれば再帰問い合わせを使って以下
> のように書けると思います。
>
> =# WITH RECURSIVE t (key, key_p, name) AS (
> (# SELECT g.key, g.key_p, g.name
> (# FROM goods AS g WHERE g.name LIKE '%菓子%'
> (# UNION SELECT g.key, g.key_p, g.name
> (# FROM goods AS g, t WHERE g.key_p = t.key
> (# ) SELECT t.key, t.key_p, t.name FROM t;
> key | key_p | name
> ------+-------+------------
> 1500 | 1000 | お菓子
> 1510 | 1500 | 和菓子
> 1520 | 1500 | 洋菓子
> 1511 | 1510 | 生和菓子
> 1512 | 1510 | まんじゅう
> 1513 | 1510 | ようかん
> 1514 | 1510 | せんべい
> 1515 | 1510 | 最中
> 1521 | 1520 | プリン
> 1522 | 1520 | ゼリー
> 1523 | 1520 | ケーキ
> 1524 | 1520 | パイ
> 1525 | 1520 | カステラ
> (13 rows)

以上、よろしくお願いします。


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




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