Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterschied zwischen where_in und find_in_set

WHERE IN erfordert, dass der Wertesatz wörtlich in der Abfrage angegeben wird, nicht als einzelner Wert, der eine durch Kommas getrennte Zeichenfolge enthält. Wenn Sie schreiben:

WHERE 6 IN (a.allowed_activity)

es behandelt a.allowed_activity als einzelnen Wert und vergleichen Sie ihn mit 6 , nicht als ein Satz von mehreren zu durchsuchenden Werten.

FIND_IN_SET sucht in einer kommagetrennten Zeichenfolge nach dem Wert.

Eine andere Möglichkeit, es anzuzeigen, ist IN ist eine Abkürzung für eine Reihe von = Tests kombiniert mit OR :

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

ist die Abkürzung für

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

Wenn Sie es so umschreiben, können Sie deutlich sehen, warum es nicht mit einer Spalte funktioniert, die eine durch Kommas getrennte Zeichenfolge enthält. Es übersetzt einfach

WHERE 6 IN (a.allowed_activity) 

zu:

WHERE 6 = a.allowed_activity