Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Klauzula IN zmiennej MYSQL

Przyjrzyj się find_in_set() funkcja:

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

Aby to zadziałało, lista rozdzielana przecinkami nie powinna zawierać cudzysłowów (chyba że nazwy użytkownika faktycznie zawierają cudzysłowy) i nie powinna być uzupełniona spacjami:

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

Przykład SqlFiddle

Aby bezpośrednio odpowiedzieć na Twoje pytanie dotyczące „dlaczego zmienna w NOT IN filtr działa", to dlatego, że @valid_users jest traktowany jako ciąg znaków i kiedy przekazujesz go do IN() , jest traktowany jako pojedynczy ciąg (tzn. nie zestaw/lista). Za pomocą FIND_IN_SET() , traktuje ciąg w @valid_users jako zestaw/listę oddzielonych przecinkami i używa ich odpowiednio.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj następny automatyczny przyrost

  2. Group_concat w starej wersji MySQL

  3. Zwiększanie ciągu o jeden w PHP

  4. Zapytanie LEFT OUTER JOIN nie zwraca oczekiwanych wierszy

  5. Czy ktoś ma spory dowód na to, że CHAR jest szybszy niż VARCHAR?