まず、フィールドでカンマ区切りの値を使用するのは問題があるため、代わりにそれらを個別のテーブルに格納することを検討する必要があります。そうすれば、レコードをより効率的に取得できます。
select ...
from mainTable t
inner join valueTable v1 on v1.id = t.id and v1.value = 1
inner join valueTable v2 on v2.id = t.id and v2.value = 2
inner join valueTable v3 on v3.id = t.id and v3.value = 3
それが不可能な場合は、低速の文字列照合を行う必要があります。カンマ区切りの文字列の値を一致させるには、like
を使用できます 演算子:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
検索された値の両側に区切り文字を配置すると、誤検知が発生しないようになります。フィールド値の前後にコンマを追加すると、最初と最後の値を確実に見つけることができます。