sql >> Databasteknik >  >> RDS >> Mysql

MYSQL-variabel IN-sats

Du kommer att vilja ta en titt på MySQL:s find_in_set() funktion:

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

För att detta ska fungera bör den kommaseparerade listan inte innehålla citattecken (såvida inte dina användarnamn faktiskt innehåller citattecken) och bör inte vara utfylld med mellanslag:

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

SqlFiddle-exempel

För att direkt svara på din fråga om "varför skulle en variabel i NOT IN filter fungerar", beror det på att @valid_users behandlas som en sträng och när du skickar den till IN() , den behandlas som en enda sträng (dvs. inte en uppsättning/lista). Med FIND_IN_SET() , behandlar den strängen i @valid_users som en kommaseparerad uppsättning/lista och använder den därefter.




  1. MySQL:Välj alla datum mellan datumintervall och få tabelldata som matchar datum

  2. Aktivera Python för att ansluta till MySQL via SSH Tunneling

  3. Skicka flera värden i en enda parameter

  4. ASP/.NET för att ansluta MySQL Server utan att använda ODBC eller någon drivrutin?