人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのSQLの書き方で、複数の項目に一致するか調べる方法で、ORを使った方法よりもすっきりしているか、処理がスマートな方法を教えてください。

例)
a_1,a_2,a_3,a_4のいずれかが、100であるレコードをセレクトする
SELECT
*
FROM
a_table
WHERE
(
a_1 = "100"
OR a_2 = "100"
OR a_3 = "100"
OR a_4 = "100" )

INを使うような気がするのですが、左に値をもってくることもできないでしょうし、ORを使うしかないのでしょうか?

●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL SELECT SQL いるか スマート
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● いのくに
●23ポイント

テーブルの設計が適切でないと考えます。

きちんと正規化されていれば、このような SQL 文にはならないはずです。

http://oku.edu.mie-u.ac.jp/~okumura/php/db.html


もし、テーブルの設計変更ができないのであれば、そのような SQL 文でやるしかないでしょう。

◎質問者からの返答

ありがとうございます。


2 ● Sampo
●30ポイント

where 100 in ( a_1, a_2, a_3, a_4 )

使えないことなんてありませんよ。

まったく正しいwhere節です。

http://end

◎質問者からの返答

できるんですね。

ありがとうございます。


3 ● b-wind
●40ポイント

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.1.2 比較演算子

一応 IN 構文も使えるはず。

SELECT * FROM a_table
 WHERE "100" IN ( a_1,a_2,a_3,a_4 );

ただ、どちらにせよこのやりかたでは INDEX がうまく使えず、パフォーマンスが悪い。

MySQL は1度に1つの INDEX しか使えないので4つのクエリに分割して実行し、結果を結合する方が良いように思える。

◎質問者からの返答

4つを分割して実行して、結果を結合するなんて考えてもみませんでした。

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ