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