[pgsql-jp: 40413] Re: 階層問い合わせの使い方について
Hitoshi Harada
umi.tanuki @ gmail.com
2010年 9月 21日 (火) 17:11:12 JST
2010年9月21日16:12 Tomoaki Sato <sato @ sraoss.co.jp>:
> 佐藤です。
>
>> 佐藤です。
>>
>> 8.3 で再帰問い合わせが使えないから connectby 関数でやっているんですね。
>> もうちょっと考えてみます。
>
> スマートではないですが、自己結合すればできますね。
>
> =# 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 '%菓子%';
> ただ、これなら 1 つの SQL にこだわらず、条件に一致するキーを取得し、キー
> ごとに connectby 関数を実行したほうがいいかもしれません。
>
1つのSQLにこだわらないならPL/pgSQLも検討の価値ありですね。再帰呼び出しで直感的に記述できます。
8.3までなら自分はこのような問題でPL/pgSQLをよく使っていました。8.4からはもちろん再帰クエリを使っていますが :)
--
Hitoshi Harada
pgsql-jp メーリングリストの案内