Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cláusula IN da variável MYSQL


Você vai querer dar uma olhada no find_in_set() função:
SELECT
    *
FROM
    your_table
WHERE
    NOT FIND_IN_SET(User.user_name, @valid_users);

Para que isso funcione, a lista separada por vírgulas não deve conter aspas (a menos que seus nomes de usuário realmente contenham aspas) e não deve ser preenchida com espaços:
SET @valid_users := 'admin,jrock,kmicka,First Last';

Exemplo do SqlFiddle

Para responder diretamente à sua pergunta sobre "por que uma variável no NOT IN filtro funciona", é porque @valid_users está sendo tratado como uma string e quando você a passa para IN() , está sendo tratado como uma única string (ou seja, não um conjunto/lista). Com FIND_IN_SET() , ele trata a string em @valid_users como um conjunto/lista separado por vírgulas e usa-o de acordo.