[pgsql-jp: 40439] Re: 階層問い合わせの使い方について
kuma @ fgy.co.jp
kuma @ fgy.co.jp
2010年 10月 6日 (水) 14:36:07 JST
お世話になります、大熊です。
以前、表題の件でご質問させて頂いた時に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)
以上、よろしくお願いします。
pgsql-jp メーリングリストの案内