Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Pesquisa MySQL para 1,2,3,11,22,33 no campo


Em primeiro lugar, usar valores separados por vírgulas em um campo é problemático e você deve considerar armazená-los em uma tabela separada. Então você pode obter o registro de forma mais eficiente:
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 isso não for possível, você deve seguir o caminho lento de correspondência de strings. Para corresponder os valores em uma string separada por vírgulas, você pode usar o like operador:
... where
  concat(',', someField, ',') like '%,1,%' and
  concat(',', someField, ',') like '%,2,%' and
  concat(',', someField, ',') like '%,3,%'

Colocar o separador em ambos os lados do valor pesquisado garante que você não obtenha nenhum falso positivo. Adicionar as vírgulas antes e depois do valor do campo garante que você possa encontrar o primeiro e o último valor.