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