- ベストアンサー
INで抽出した順番に並び替え(SQL)
MySQLでINで抽出した順番で並び替えて表示したいのですが、簡単に行う方法はありませんか? [例] SELECT ID,NAME FROM TABLE WHERE ID IN (5,7,3); このSELECT文の抽出結果を5,7,3の順番に並び替えたいのです。 もちろん力技で行うこと(1つずつSELECTで抽出して表示)は可能なのですが、あまりにもスマートではないので・・・。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>FIELDの商品コードを'で囲んだところ、 >エラーは出なくなりましたが並び替えは上手くいきませんでした。 「'」(アポストロフィー)で囲んでしまうと、文字定数となるので、FIELD関数は正しく動作しません。 予約語と同じキーワードを使う場合は、「`」(バッククォート)を使いますが、今回は日本語の列名ということで該当しません。 MySQL 5.0では、下記SQLで動作しました。 SELECT 商品コード,商品名 FROM 商品マスタ WHERE 商品コード IN (5,7,3) ORDER BY FIELD(商品コード,5,7,3); マニュアルを見る限り、FIELD関数は昔からあるようです。#2回答者さんへのお礼にある「使えなかった」とは、具体的にどうなるのでしょうか? 下記のSQL例のように、CASEでも同様の結果を得られます。 SELECT 商品コード,商品名 FROM 商品マスタ WHERE 商品コード IN (5,7,3) ORDER BY CASE 商品コード WHEN 5 THEN 1 WHEN 7 THEN 2 WHEN 3 THEN 3 END; なお、ORDER BYで列名でなく式を指定した場合、インデクスを使ったソート抑止は行えませんので注意してください。 →商品コードで絞り込んだ後なので、今回は問題ないとも思いますけどね。
その他の回答 (3)
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンは? 表名は、「TABLE」なのですか?そうすると、「`」で囲まないと、予約語で構文エラーになると思いますが? select `id`,`name` from `table` where `id` in(5,7,3) order by field(`id`,5,7,3);
お礼
ソートすることができました。 ありがとうございました!
補足
SELECT 商品コード,商品名 FROM 商品マスタ WHERE 商品コード IN (5,7,3) ORDER BY FIELD('商品コード',5,7,3); 実際には↑こうです。 FIELDの商品コードを'で囲んだところ、 エラーは出なくなりましたが並び替えは上手くいきませんでした。
- mooboogie
- ベストアンサー率68% (28/41)
SELECT ID,NAME FROM TABLE WHERE ID IN (5,7,3) ORDER BY FIELD( ID, 5,7,3 ); で、出来ます。ベストな方法かどうかは知りませんが。
お礼
> ORDER BY FIELD( ID, 5,7,3 ); これだけの記述で出来ればまさに望んだとおりなのですが、使えませんでした。
- chukenkenkou
- ベストアンサー率43% (833/1926)
他の列などで、ソートするための情報(規則)はあるのですか? 規則性がないなら、case式などで与えるしかありません。
お礼
アドバイスありがとうございます。 規則性はありません。 規則性というよりは「5,7,3」の配列に 従った並び順にしたいのです。
お礼
構文エラーが出ていたのですが、 今再確認したところ無事に動作しました。 私のミスだったみたいです。 申し訳ありません。 詳細な説明をありがとうございました。