いちばん失敗した人決定戦

「1,2,3,5,10…」のようにカンマ区切りになっている文字列が格納されているカラム(number)があり、その文字列に含まれている数字と検索用配列「1,2,3」と比較して存在すれば抽出するみたいなことがやりたいのですがよくわかりません。

カンマ区切りではなく単一の数字であれば
select * from tests where number IN(1,2,3);
みたいな感じでnumberがIN()のなかにあるかどうかで抽出できると思うのですが、この場合はどのようにすればよいのでしょうか。

ちょっと説明が下手でわかりづらいかと思いますがよろしくおねがいします。

A 回答 (2件)

この場合は



検索用テーブル
id number
x 1
x 2
x 3
x 5
x 10
y 1
y 7
・・・

的なデータの持ち方をするのが妥当です。
(もちろんきちんとインデックスを貼っておくこと)

select * from tests
inner join (selcet disctinct id from 検索用テーブル
where number IN (1,2,3)
) using(id)

のように処理をすればよいでしょう
    • good
    • 0

データの持ち方がすでにSQLの概念を逸脱しているように見えますが・・・


仮にできたとしてもとてもスピードはでないですし、チューニングも
できないように思えます。
正規化について学習なさることをお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

数字を一纏めに格納したかったので数字間をカンマ区切りにして格納したのですが、別テーブルのidなどを持たせてそちらに一つ一つ格納したほうが良かったのでしょうか。

勉強します。

お礼日時:2009/12/26 07:16

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

関連するカテゴリからQ&Aを探す