[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 メーリングリストの案内