sql >> Base de Datos >  >> RDS >> Mysql

Cláusula IN de la variable MYSQL

Querrá echar un vistazo a find_in_set() función:

SELECT
    *
FROM
    your_table
WHERE
    NOT FIND_IN_SET(User.user_name, @valid_users);

Para que esto funcione, la lista separada por comas no debe contener comillas (a menos que sus nombres de usuario realmente contengan comillas) y no debe rellenarse con espacios:

SET @valid_users := 'admin,jrock,kmicka,First Last';

Ejemplo de SqlFiddle

Para responder directamente a su pregunta sobre "¿por qué una variable en NOT IN trabajo de filtro", es porque @valid_users se trata como una cadena y cuando se pasa a IN() , se trata como una sola cadena (es decir, no como un conjunto/lista). Con FIND_IN_SET() , trata la cadena en @valid_users como un conjunto/lista separados por comas y lo utiliza en consecuencia.