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';
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.