質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

5回答

13065閲覧

SQLで条件に指定した順番でデータをSELECTする方法はないでしょうか

noshanta

総合スコア12

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2016/04/27 03:57

SQL初心者です。
テーブルに以下のような状態でデータが格納されている場合に、
条件に指定した順番でデータを返してほしいのですが、
返ってきた結果はソートされてしまっており困っています。

テーブル
従業員ID 年齢
90 22
91 44
92 33
93 55

検索SQL
SELECT 年齢 FROM テーブル WHERE 従業員ID='92' OR '90' OR '91'

結果
22
44
33

期待する結果
33
22
44

条件をORで指定しているのが悪いような気がしていますが、
どなたか改善策をご教授頂けないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

実際には、何がしかのプログラム言語で、操作をされていますよね?
それであれば、
SELECT 従業員ID,年齢 FROM テーブル WHERE 従業員ID='92' OR '90' OR '91'
とするとデータのセットが得られますので、これを使って関係付をすればいいのではないでしょうか?
92 33
90 22
91 44

投稿2016/04/27 04:13

lightson

総合スコア553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2016/04/27 04:28

何万件も引くのでないかぎり(たいていこういう操作が必要になるのは数十件程度ですし)、これが手っ取り早い気もします。
noshanta

2016/04/27 04:42

javaでやっています。 この方法なら検索回数も多くないので、この方法でやってみようと思います。 ありがとうございました!
guest

0

MySQLにはORDER BY FIELD構文がありますが、マニュアルを見る限り、SQLiteにはなさそうですね。。
http://www.tutorialspoint.com/sqlite/sqlite_order_by.htm

stackorverflowでも同様の質問がありましたが、「CASE句を使え」という回答になっていますね。
http://stackoverflow.com/questions/3303851/sqlite-and-custom-order-by

投稿2016/04/27 04:09

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noshanta

2016/04/27 04:40

CASE句について調べてみます。ありがとうございます。
guest

0

SQLというのはORDER BY句による昇順か降順でしか並び替えはできません。
指定がない場合の順序はDBの仕様に依存します。
SQLiteがどのような動くになるかはわかりません。

解決策としては、順序を決定づける列を追加し、その列でソートをする。

従業員ID 年齢 優先順位
90 22 2
91 44 3
92 33 1
93 55 4

SQL

1SELECT 年齢 FROM テーブル WHERE 従業員ID='92' OR '90' OR '91' ORDER BY 優先順位

もしくは次のようにクエリを分けて結果を結合する。

SQL

1SELECT 年齢 FROM テーブル WHERE 従業員ID='92' 2UNION 3SELECT 年齢 FROM テーブル WHERE 従業員ID='90' 4UNION 5SELECT 年齢 FROM テーブル WHERE 従業員ID='91'

いずれもSQLiteでの確認はしていませんので、参考程度に。

投稿2016/04/27 04:11

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noshanta

2016/04/27 04:41

カラムは増やしたくないので、クエリを分ける方を少し試してみようと思います。 ありがとうございます。
guest

0

条件で指定する順番を判断する情報は対象テーブル(もしくは外部のテーブル)に存在しますか?

投稿2016/04/27 04:09

HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noshanta

2016/04/27 04:39 編集

他テーブルには存在していません。
guest

0

sql

1SELECT 年齢 FROM テーブル WHERE 従業員ID='92' OR '90' OR '91' ORDER BY 従業員ID ASC

投稿2016/04/27 04:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問