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