Neem een kijkje in MySQL's find_in_set()
functie:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Om dit te laten werken, mag de door komma's gescheiden lijst geen aanhalingstekens bevatten (tenzij uw gebruikersnamen daadwerkelijk aanhalingstekens bevatten) en mag deze niet worden opgevuld met spaties:
SET @valid_users := 'admin,jrock,kmicka,First Last';
Om direct antwoord te geven op uw vraag over "waarom zou een variabele in de NOT IN
filterwerk", is dat omdat @valid_users
wordt behandeld als een tekenreeks en wanneer u deze doorgeeft aan IN()
, het wordt behandeld als een enkele string (d.w.z. niet een set/lijst). Met FIND_IN_SET()
, het behandelt de string in @valid_users
als een door komma's gescheiden set/lijst en gebruikt het dienovereenkomstig.