На първо място, използването на стойности, разделени със запетая, в поле е проблематично и трябва да помислите вместо това да ги съхранявате в отделна таблица. Тогава можете да получите записа по-ефективно:
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,%'
Поставянето на разделител от двете страни на търсената стойност гарантира, че няма да получите фалшиви положителни резултати. Добавянето на запетаи преди и след стойността на полето гарантира, че можете да намерите първата и последната стойност.