Po pierwsze, używanie wartości oddzielonych przecinkami w polu jest problematyczne i zamiast tego powinieneś rozważyć przechowywanie ich w oddzielnej tabeli. Wtedy możesz uzyskać rekord bardziej efektywnie:
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
Jeśli nie jest to możliwe, musisz wybrać powolny sposób dopasowywania ciągów. Aby dopasować wartości w ciągu oddzielonym przecinkami, możesz użyć like
operator:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
Umieszczenie separatora po obu stronach szukanej wartości zapewnia, że nie otrzymasz żadnych fałszywych alarmów. Dodanie przecinków przed i po wartości pola daje pewność, że znajdziesz pierwszą i ostatnią wartość.