sql >> Database >  >> RDS >> Mysql

MYSQL variabele IN clausule

Neem een ​​kijkje in MySQL's find_in_set() functie:

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

Om dit te laten werken, mag de door komma's gescheiden lijst geen aanhalingstekens bevatten (tenzij uw gebruikersnamen daadwerkelijk aanhalingstekens bevatten) en mag deze niet worden opgevuld met spaties:

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

SqlFiddle-voorbeeld

Om direct antwoord te geven op uw vraag over "waarom zou een variabele in de NOT IN filterwerk", is dat omdat @valid_users wordt behandeld als een tekenreeks en wanneer u deze doorgeeft aan IN() , het wordt behandeld als een enkele string (d.w.z. niet een set/lijst). Met FIND_IN_SET() , het behandelt de string in @valid_users als een door komma's gescheiden set/lijst en gebruikt het dienovereenkomstig.




  1. Hoe sqrt() werkt in PostgreSQL

  2. Ontsnap aan onbewerkte SQL-query's in Laravel 4

  3. 3 manieren om de Modulo terug te sturen in MariaDB

  4. Laravel welsprekend vinden terugkerende null