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