Mysql
 sql >> Base de données >  >> RDS >> Mysql

différence entre where_in et find_in_set

WHERE IN exige que l'ensemble de valeurs soit spécifié littéralement dans la requête, et non comme une valeur unique contenant une chaîne délimitée par des virgules. Si vous écrivez :

WHERE 6 IN (a.allowed_activity)

il traitera a.allowed_activity comme une seule valeur et comparez-la avec 6 , et non comme un ensemble de valeurs multiples à rechercher.

FIND_IN_SET recherche une chaîne délimitée par des virgules pour la valeur.

Une autre façon de le voir est que IN est un raccourci pour un tas de = tests combinés avec OR :

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

est l'abréviation de

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

Lorsque vous le réécrivez comme ceci, vous pouvez voir clairement pourquoi cela ne fonctionnera pas avec une colonne contenant une chaîne délimitée par des virgules. Il se traduit simplement

WHERE 6 IN (a.allowed_activity) 

à :

WHERE 6 = a.allowed_activity