En primer lugar, el uso de valores separados por comas en un campo es problemático y, en su lugar, debería considerar almacenarlos en una tabla separada. Entonces podría obtener el registro de manera más eficiente:
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
Si eso no es posible, debe seguir el camino lento de coincidencia de cadenas. Para hacer coincidir los valores en una cadena separada por comas, puede usar like
operador:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
Poner el separador a ambos lados del valor buscado asegura que no obtenga ningún falso positivo. Agregar las comas antes y después del valor del campo asegura que pueda encontrar el primer y el último valor.