WHERE IN
kræver, at sættet af værdier angives bogstaveligt i forespørgslen, ikke som en enkelt værdi, der indeholder en kommasepareret streng. Hvis du skriver:
WHERE 6 IN (a.allowed_activity)
det vil behandle a.allowed_activity
som kun en enkelt værdi, og sammenlign den med 6
, ikke som et sæt af flere værdier, der skal søges i.
FIND_IN_SET
søger i en kommasepareret streng efter værdien.
En anden måde at se det på er IN
er en genvej til en masse =
test kombineret med OR
:
WHERE x IN (a, b, c, d)
er en forkortelse for
WHERE x = a OR x = b OR x = c OR x = d
Når du omskriver det på denne måde, kan du tydeligt se, hvorfor det ikke vil fungere med en kolonne, der indeholder en kommasepareret streng. Det oversætter simpelthen
WHERE 6 IN (a.allowed_activity)
til:
WHERE 6 = a.allowed_activity