Ti consigliamo di dare un'occhiata a find_in_set()
funzione:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
Affinché funzioni, l'elenco separato da virgole non dovrebbe contenere virgolette (a meno che i tuoi nomi utente non contengano effettivamente virgolette) e non dovrebbe essere riempito con spazi:
SET @valid_users := 'admin,jrock,kmicka,First Last';
Per rispondere direttamente alla tua domanda su "perché dovrebbe una variabile nel NOT IN
filter work", è perché @valid_users
viene trattata come una stringa e quando la passi a IN()
, viene trattata come una singola stringa (cioè non un insieme/elenco). Con FIND_IN_SET()
, tratta la stringa in @valid_users
come set/elenco separato da virgole e lo utilizza di conseguenza.