WHERE IN
vereist dat de reeks waarden letterlijk in de query wordt opgegeven, niet als een enkele waarde die een door komma's gescheiden tekenreeks bevat. Als je schrijft:
WHERE 6 IN (a.allowed_activity)
het behandelt a.allowed_activity
als slechts een enkele waarde, en vergelijk deze met 6
, niet als een set van meerdere waarden om te zoeken.
FIND_IN_SET
zoekt een door komma's gescheiden tekenreeks voor de waarde.
Een andere manier om het te bekijken is dat IN
is een snelkoppeling voor een aantal =
tests gecombineerd met OR
:
WHERE x IN (a, b, c, d)
is een afkorting voor
WHERE x = a OR x = b OR x = c OR x = d
Als je het op deze manier herschrijft, kun je duidelijk zien waarom het niet werkt met een kolom die een door komma's gescheiden tekenreeks bevat. Het vertaalt eenvoudig
WHERE 6 IN (a.allowed_activity)
naar:
WHERE 6 = a.allowed_activity