• 締切済み

検索時に並び替えを無効にするには?

初めまして、nana0224と申します 現在Postgresql8.2で開発中なのですが 複数検索で検索した場合その検索値順で取得したいのですが 可能でしょうか? order byは昇順か降順しかなく無効にする事は出来ないのでしょうか? シーケンスを発行しても並び替えをしてからなので意味がありませんでした。 select * from A where id in(7,9,4,6) ↑この(7,9,4,6)の順で取得したいのですが・・ すみませんが皆様良いお知恵をよろしくお願い致します。<m(__)m>

みんなの回答

回答No.1

>複数検索で検索した場合その検索値順で取得したい 「検索値順」というのは、非常に曖昧な表現です。「検索条件の値の指定順」といった表現にすべきです。なぜなら、RDBMSは性能を出すために、検索条件を最適化し、物理的なI/Oが出る順にして検索してくれたりするからです。 PostgreSQL 8.2なら、それまではin条件を「or条件」のアクセス計画を作っていたものを、「in条件」のアクセス計画にするようになっていると記憶しています。 前置きが長くなってしまいましたが、ここからが直接的なアドバイスです。 こういったケースでは、case式等でソート順を与えてやる必要があります。 select * from A where id in(7,9,4,6) order by case id when 7 then 1 when 9 then 2 when 4 then 3 when 6 then 4 else 0 end といった書き方になります。

nana0224
質問者

お礼

chukenkenkouさん 早速の回答、有難うございます! 私の質問が至らず申し訳御座いませんでした。未だ開発経験2年ばかしのものでして・・勉強不足でした。 とても勉強になりました! case式で与えてあげるのですね。なるほど、これなら動的な場合でも 対応出来ますね。 早速試してみます! 有難う御座いました<m(__)m>

関連するQ&A