Vous aurez envie de jeter un oeil à MySQL find_in_set()
fonction :
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Pour que cela fonctionne, la liste séparée par des virgules ne doit pas contenir de guillemets (sauf si vos noms d'utilisateur contiennent réellement des guillemets) et ne doit pas être complétée par des espaces :
SET @valid_users := 'admin,jrock,kmicka,First Last';
Pour répondre directement à votre question concernant "pourquoi une variable dans le NOT IN
filter work", c'est parce que @valid_users
est traité comme une chaîne et lorsque vous le transmettez à IN()
, il est traité comme une seule chaîne (c'est-à-dire pas un ensemble/une liste). Avec FIND_IN_SET()
, il traite la chaîne dans @valid_users
sous forme d'ensemble/liste séparée par des virgules et l'utilise en conséquence.