WHERE IN
requer que o conjunto de valores seja especificado literalmente na consulta, não como um único valor contendo uma string delimitada por vírgulas. Se você escrever:WHERE 6 IN (a.allowed_activity)
ele tratará
a.allowed_activity
como um único valor e compare-o com 6
, não como um conjunto de vários valores a serem pesquisados. FIND_IN_SET
pesquisa uma string delimitada por vírgulas para o valor. Outra maneira de visualizá-lo é que
IN
é um atalho para vários =
testes combinados com OR
:WHERE x IN (a, b, c, d)
é curto para
WHERE x = a OR x = b OR x = c OR x = d
Ao reescrevê-lo assim, você pode ver claramente por que ele não funcionará com uma coluna contendo uma string delimitada por vírgulas. Simplesmente traduz
WHERE 6 IN (a.allowed_activity)
para:
WHERE 6 = a.allowed_activity