Mysql
 sql >> Database >  >> RDS >> Mysql

Clausola IN della variabile MySQL

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

Esempio SqlFiddle

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.