Mysql
 sql >> Base de données >  >> RDS >> Mysql

Clause IN de la variable MYSQL

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

Exemple SqlFiddle

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.