[pgsql-jp: 40415] Re: 階層問い合わせの使い方について
kuma @ fgy.co.jp
kuma @ fgy.co.jp
2010年 9月 24日 (金) 11:26:16 JST
お世話になります、大熊です。
皆さん、いろいろとご教示いただきありがとうございます。
再帰問い合わせは魅力的なんですが、どうしても現環境を使わざる得ない状況な
のでconnectbyになってしまいます。
また、PL/pgSQLやtablefunc.cを修正するとなると、かなりスキルが足りません
ので佐藤さんにご提示していただいた方法でやってみたいと思います。
ありがとうございました。
> スマートではないですが、自己結合すればできますね。
>
> =# SELECT DISTINCT g.key, g.key_p, g.name
> -# FROM goods AS g, goods AS g2
> -# WHERE g.key IN (
> (# SELECT g3.key
> (# FROM connectby('goods', 'key', 'key_p', g2.key, 0)
> (# AS t(key text, key_p text, level int), goods AS g3
> (# WHERE g3.key = t.key
> (# ) AND g2.name LIKE '%菓子%';
> key | key_p | name
> ------+-------+------------
> 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 | カステラ
> (13 rows)
>
> ただ、これなら 1 つの SQL にこだわらず、条件に一致するキーを取得し、キー
> ごとに connectby 関数を実行したほうがいいかもしれません。
pgsql-jp メーリングリストの案内