dポイントプレゼントキャンペーン実施中!

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

A 回答 (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

といった書き方になります。
    • good
    • 0
この回答へのお礼

chukenkenkouさん
早速の回答、有難うございます!

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

お礼日時:2007/09/03 19:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!