WHERE IN
wymaga, aby zestaw wartości był określony dosłownie w zapytaniu, a nie jako pojedyncza wartość zawierająca ciąg znaków oddzielonych przecinkami. Jeśli piszesz:
WHERE 6 IN (a.allowed_activity)
będzie traktować a.allowed_activity
jako pojedynczą wartość i porównaj ją z 6
, a nie jako zbiór wielu wartości do przeszukania.
FIND_IN_SET
przeszukuje ciąg znaków oddzielonych przecinkami.
Innym sposobem, aby to zobaczyć, jest to, że IN
to skrót dla wielu =
testy połączone z OR
:
WHERE x IN (a, b, c, d)
jest skrótem od
WHERE x = a OR x = b OR x = c OR x = d
Kiedy przepiszesz go w ten sposób, możesz wyraźnie zobaczyć, dlaczego nie będzie działać z kolumną zawierającą ciąg oddzielony przecinkami. Po prostu tłumaczy
WHERE 6 IN (a.allowed_activity)
do:
WHERE 6 = a.allowed_activity