Allereerst is het problematisch om door komma's gescheiden waarden in een veld te gebruiken, en u kunt overwegen ze in plaats daarvan in een aparte tabel op te slaan. Dan zou je het record efficiënter kunnen krijgen:
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
Als dat niet mogelijk is, moet je de trage string-matching-manier volgen. Om de waarden in een door komma's gescheiden tekenreeks overeen te laten komen, kunt u de like
. gebruiken operator:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
Door het scheidingsteken aan beide zijden van de gezochte waarde te plaatsen, zorgt u ervoor dat u geen valse positieven krijgt. Door de komma's voor en na de veldwaarde toe te voegen, weet je zeker dat je de eerste en laatste waarde kunt vinden.