WHERE IN
richiede che il set di valori sia specificato letteralmente nella query, non come un singolo valore contenente una stringa delimitata da virgole. Se scrivi:
WHERE 6 IN (a.allowed_activity)
tratterà a.allowed_activity
come un singolo valore e confrontalo con 6
, non come un insieme di più valori da cercare.
FIND_IN_SET
cerca il valore in una stringa delimitata da virgole.
Un altro modo per visualizzarlo è che IN
è una scorciatoia per un mucchio di =
test combinati con OR
:
WHERE x IN (a, b, c, d)
è l'abbreviazione di
WHERE x = a OR x = b OR x = c OR x = d
Quando lo riscrivi in questo modo, puoi vedere chiaramente perché non funzionerà con una colonna contenente una stringa delimitata da virgole. Si traduce semplicemente
WHERE 6 IN (a.allowed_activity)
a:
WHERE 6 = a.allowed_activity