- PR -

MySQL 複数の固定列に、ある組み合わせを含む行を取得

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/06/30
投稿数: 12
投稿日時: 2008-08-15 14:53
お世話になります。

MySQL5.0.51aを使用しております。
やりたいことは、「固定列からある組み合わせを含む行を取得」です。

抽象的に話をするとややこしくなりそうなので、
例として具体値を決めて記述させていただきます。

以下の5カラムのどれかに、1 と 5 を含む行を取得したいのです。
補足1:1と5の両方をいずれかのカラムに含んでいること。
補足2:補足1を満たせば、その他のカラム値は問わない。
コード:

| col1 | col2 | col3 | col4 | col5 |
| 3 | 1 | 0 | 5 | 4 |
| 2 | null | 6 | 0 | 1 |


上記条件の場合、1行目のみ取得したい。

joinを使えば、
行列変換してgroup by、having、count等を使って
想定している動作は可能なのですが、
もっとスマートな方法はありませんか?

例えば、
行列変換せずに直接、
WHERE col1 IN (〜)
AND col2 IN (〜)
AND col3 IN (〜)
AND col4 IN (〜)
AND col5 IN (〜)
のような条件でできれば、嬉しい限りです。
(私の頭ではできませんでした…)

よろしくお願いいたします。

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-08-15 15:00 ]

[ メッセージ編集済み 編集者: 未記入 編集日時 2008-08-15 15:25 ]
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2008-08-15 14:58
> WHERE 1 in (col1,col2,col3,col4,col5) AND 5 in (col1,col2,col3,col4,col5)

in句はorに展開しても良いかもしれません。
未記入
会議室デビュー日: 2008/06/30
投稿数: 12
投稿日時: 2008-08-15 15:07
早速のご回答ありがとうございます!

カラム名と値を逆転して記述できるとは知りませんでした!
新しい発見です。ありがとうございます。
とても助かりました。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-08-16 04:03
引用:

カラム名と値を逆転して記述できるとは知りませんでした!



SQLの文法としては許されますが、もし性能を重視するなら、使うべき構文ではありません。
未記入
会議室デビュー日: 2008/06/30
投稿数: 12
投稿日時: 2008-08-16 14:05
ご回答ありがとうございます。

引用:

SQLの文法としては許されますが、もし性能を重視するなら、使うべき構文ではありません。


そうなのですか・・・
詳細検索の結構重い処理で使おうとしているのですが、
他に何か良い方法があれば、お教えいただけるとありがたいです。

一回の検索の対象は5テーブルでそれぞれ100万〜1000万件のデータにも対応できるようにしたいと考えています。


[ メッセージ編集済み 編集者: 未記入 編集日時 2008-08-16 14:27 ]
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2008-08-19 16:32
引用:

詳細検索の結構重い処理で使おうとしているのですが、
他に何か良い方法があれば、お教えいただけるとありがたいです。



いつでもどんな場合でも最良の方法というのはなかなかありません。
パフォーマンスを測定してチューニングする、
という当たり前のことを地道にこなすしかないでしょう。
未記入
会議室デビュー日: 2008/06/30
投稿数: 12
投稿日時: 2008-08-19 19:12
ご返答ありがとうございます。

なんだか染みる言葉ですね。
地道に頑張ってみます。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)