92 views
【1】やりたいこと
例えば、カンマ区切りで複数の値を併記するテキスト形式ののカラム plu があるとする。
3,8,11,524
このときに、SELECTコマンドで pluの中に 8が存在するレコードを取得したい場合、どう書くか?
【2】やってみる
(1) 検索対象の値が 1種類の場合
FIND_IN_SET( {値}, {カラム名} ) で検索対象の値を指定すればよい。
SELECT * FROM {テーブル名} WHERE FIND_IN_SET('8',`plu`);
(2) 検索対象の値が 2種類以上の場合
FIND_IN_SET( {値1,値2}, {カラム名} ) とは書けない。
FIND_IN_SETを AND もしくは OR で繋げて複数書く必要がある。
SELECT * FROM {テーブル名} WHERE FIND_IN_SET('8',`plu`) OR FIND_IN_SET('10',`plu`);
【3】その他
・カラムが保持する値が一つ、すなわちカラムの値がカンマ区切り文字列でない場合は?
→ 上記の FIND_IN_SETを使ったクエリは正しく動作する。