Za prvé, použití hodnot oddělených čárkami v poli je problematické a měli byste zvážit jejich uložení do samostatné tabulky. Pak byste mohli získat záznam efektivněji:
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
Pokud to není možné, musíte jít cestou pomalého porovnávání řetězců. Chcete-li porovnat hodnoty v řetězci odděleném čárkou, můžete použít like
operátor:
... where
concat(',', someField, ',') like '%,1,%' and
concat(',', someField, ',') like '%,2,%' and
concat(',', someField, ',') like '%,3,%'
Umístěním oddělovače na obě strany hledané hodnoty zajistíte, že nedostanete žádné falešně pozitivní výsledky. Přidáním čárek před a za hodnotu pole zajistíte, že najdete první a poslední hodnotu.