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

MYSQL-Variable IN-Klausel

Sie sollten sich MySQLs find_in_set() Funktion:

SELECT
    *
FROM
    your_table
WHERE
    NOT FIND_IN_SET(User.user_name, @valid_users);

Damit dies funktioniert, sollte die durch Kommas getrennte Liste keine Anführungszeichen enthalten (es sei denn, Ihre Benutzernamen enthalten tatsächlich Anführungszeichen) und nicht mit Leerzeichen aufgefüllt werden:

SET @valid_users := 'admin,jrock,kmicka,First Last';

SqlFiddle-Beispiel

Um Ihre Frage bezüglich "Warum sollte eine Variable in der NOT IN filter work", weil @valid_users als String behandelt wird und wenn Sie es an IN() übergeben , wird es als einzelne Zeichenfolge behandelt (d. h. nicht als Satz/Liste). Mit FIND_IN_SET() , behandelt es die Zeichenfolge in @valid_users als kommaseparierte Menge/Liste und verwendet sie entsprechend.