sql >> Database teknologi >  >> RDS >> Mysql

MYSQL variabel IN klausul

Du vil gerne tage et kig på MySQL's find_in_set() funktion:

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

For at dette skal fungere, bør den kommaseparerede liste ikke indeholde anførselstegn (medmindre dine brugernavne faktisk indeholder anførselstegn) og bør ikke være udfyldt med mellemrum:

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

SqlFiddle-eksempel

For at svare direkte på dit spørgsmål om "hvorfor skulle en variabel i NOT IN filter arbejde", er det fordi @valid_users behandles som en streng, og når du sender den til IN() , den bliver behandlet som en enkelt streng (dvs. ikke et sæt/liste). Med FIND_IN_SET() , behandler den strengen i @valid_users som et kommasepareret sæt/liste og bruger det i overensstemmelse hermed.




  1. Tovejs synkronisering mellem lokal mysql-database og AWS RDS

  2. java.sql.SQLEundtagelse:- ORA-01000:maksimale åbne markører overskredet

  3. NameError:navn '_mysql' er ikke defineret efter indstilling af ændring til mysql

  4. Hvordan opretter man en MySQL-lagret aggregatfunktion?