WHERE IN
membutuhkan kumpulan nilai untuk ditentukan secara harfiah dalam kueri, bukan sebagai nilai tunggal yang berisi string yang dipisahkan koma. Jika Anda menulis:
WHERE 6 IN (a.allowed_activity)
itu akan memperlakukan a.allowed_activity
hanya sebagai satu nilai, dan bandingkan dengan 6
, bukan sebagai kumpulan beberapa nilai untuk ditelusuri.
FIND_IN_SET
mencari string yang dipisahkan koma untuk nilainya.
Cara lain untuk melihatnya adalah IN
adalah jalan pintas untuk sekumpulan =
tes yang dikombinasikan dengan OR
:
WHERE x IN (a, b, c, d)
kependekan dari
WHERE x = a OR x = b OR x = c OR x = d
Saat Anda menulis ulang seperti ini, Anda dapat melihat dengan jelas mengapa itu tidak bekerja dengan kolom yang berisi string yang dipisahkan koma. Ini hanya menerjemahkan
WHERE 6 IN (a.allowed_activity)
ke:
WHERE 6 = a.allowed_activity