WHERE IN
requiere que el conjunto de valores se especifique literalmente en la consulta, no como un único valor que contenga una cadena delimitada por comas. Si escribes:
WHERE 6 IN (a.allowed_activity)
tratará a.allowed_activity
como un solo valor y compararlo con 6
, no como un conjunto de múltiples valores para buscar.
FIND_IN_SET
busca una cadena delimitada por comas para el valor.
Otra forma de verlo es que IN
es un atajo para un montón de =
pruebas combinadas con OR
:
WHERE x IN (a, b, c, d)
es la abreviatura de
WHERE x = a OR x = b OR x = c OR x = d
Cuando lo reescribe así, puede ver claramente por qué no funcionará con una columna que contenga una cadena delimitada por comas. Simplemente traduce
WHERE 6 IN (a.allowed_activity)
a:
WHERE 6 = a.allowed_activity