Prima di tutto, l'utilizzo di valori separati da virgola in un campo è problematico e dovresti considerare di archiviarli in una tabella separata. Quindi potresti ottenere il record in modo più efficiente:
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
Se ciò non è possibile, devi seguire il modo lento di corrispondenza delle stringhe. Per abbinare i valori in una stringa separata da virgole, puoi utilizzare il like
operatore:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
L'inserimento del separatore su entrambi i lati del valore cercato assicura di non ottenere falsi positivi. L'aggiunta delle virgole prima e dopo il valore del campo assicura che tu possa trovare il primo e l'ultimo valore.