Mysql
 sql >> Database >  >> RDS >> Mysql

differenza tra where_in e find_in_set

WHERE IN richiede che il set di valori sia specificato letteralmente nella query, non come un singolo valore contenente una stringa delimitata da virgole. Se scrivi:

WHERE 6 IN (a.allowed_activity)

tratterà a.allowed_activity come un singolo valore e confrontalo con 6 , non come un insieme di più valori da cercare.

FIND_IN_SET cerca il valore in una stringa delimitata da virgole.

Un altro modo per visualizzarlo è che IN è una scorciatoia per un mucchio di = test combinati con OR :

WHERE x IN (a, b, c, d)

è l'abbreviazione di

WHERE x = a OR x = b OR x = c OR x = d

Quando lo riscrivi in ​​questo modo, puoi vedere chiaramente perché non funzionerà con una colonna contenente una stringa delimitata da virgole. Si traduce semplicemente

WHERE 6 IN (a.allowed_activity) 

a:

WHERE 6 = a.allowed_activity