解決済みの質問
SQLのIN文の用途に関する質問です。
普段は
SELECT columns
FROM tables
WHERE column1 in (value1, value2, .... value_n);
のように使いますが、
WHERE value1 in column1;
のようにすればできないのでしょうか?
column1の値は 1,4,7,3というような内容になっています。
その中にvalue1が含まれているかどうかを判定したい場合はどうすればいいのでしょうか?
PHPかSQLでこのような問題を解決する方法をおわかりの方がいらっしゃいましたら、教えていただけないでしょうか?
よろしくお願いします。
投稿日時 - 2012-02-01 15:46:27
こういうことでしょうかねぇ?
create table tableA(id int,columns varchar(100));
insert into tableA values(1,'1,4,7,3'),(2,'5,3,22'),(3,'1,2,3'),(4,'2,3,1'),(5,'1'),(6,'4,4,4');
※id=2は22はあっても2は含まれない、id=3や4はid=1の順番違い
id=5のように単一データや、id=6のような同じデータを複数もつ場合も想定
「1」を対象とする
SELECT id FROM tableA WHERE columns REGEXP '(^|,)1(,|$)'
id=1,3,4,5がヒットします
「2」を対象とする
SELECT id FROM tableA WHERE columns REGEXP '(^|,)2(,|$)';
id=3,4がヒットします(22はヒットしません)
「3」か「4」を対象とする
SELECT id FROM tableA WHERE columns REGEXP '(^|,)(3|4)(,|$)';
・・・とここまで書いて言うのもなんですが
カンマ区切りでデータを持つのはSQL的には最悪です。
きちんとデータ分けて処理することをお勧めします。
投稿日時 - 2012-02-01 18:40:29
お礼
ありがとうございます!おかげ解決できました。
投稿日時 - 2012-02-01 19:29:18
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(1件中 1~1件目)
こういうことでしょうか?
---
SELECT *
FROM tables
WHERE INSTR(column1 ,value1) > 0;
投稿日時 - 2012-02-01 17:11:49
お礼
ありがとうございます。
仰った方法では
たとえばcolumn1の内容が 5,3,22 であれば
value1が2でしたら、含まれていると判定してしまうのではないでしょうか?
column1 が 5,3,22 であれば、 5か3か22が正解で、ほかの値を拒否するようにしたいのですが、これをどうすれば実装できるのでしょうか?
御手数ですが、またよろしくお願いします。
投稿日時 - 2012-02-01 18:11:05
OKWaveのオススメ
おすすめリンク