WHERE IN kräver att uppsättningen värden anges bokstavligt i frågan, inte som ett enda värde som innehåller en kommaavgränsad sträng. Om du skriver:
WHERE 6 IN (a.allowed_activity)
den kommer att behandla a.allowed_activity som bara ett enda värde, och jämför det med 6 , inte som en uppsättning av flera värden att söka efter.
FIND_IN_SET söker efter värdet i en kommaavgränsad sträng.
Ett annat sätt att se det är att IN är en genväg för ett gäng = tester kombinerade med OR :
WHERE x IN (a, b, c, d)
är förkortning för
WHERE x = a OR x = b OR x = c OR x = d
När du skriver om det så här kan du tydligt se varför det inte fungerar med en kolumn som innehåller en kommaavgränsad sträng. Det översätts helt enkelt
WHERE 6 IN (a.allowed_activity)
till:
WHERE 6 = a.allowed_activity