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

różnica między where_in i find_in_set

WHERE IN wymaga, aby zestaw wartości był określony dosłownie w zapytaniu, a nie jako pojedyncza wartość zawierająca ciąg znaków oddzielonych przecinkami. Jeśli piszesz:

WHERE 6 IN (a.allowed_activity)

będzie traktować a.allowed_activity jako pojedynczą wartość i porównaj ją z 6 , a nie jako zbiór wielu wartości do przeszukania.

FIND_IN_SET przeszukuje ciąg znaków oddzielonych przecinkami.

Innym sposobem, aby to zobaczyć, jest to, że IN to skrót dla wielu = testy połączone z OR :

WHERE x IN (a, b, c, d)

jest skrótem od

WHERE x = a OR x = b OR x = c OR x = d

Kiedy przepiszesz go w ten sposób, możesz wyraźnie zobaczyć, dlaczego nie będzie działać z kolumną zawierającą ciąg oddzielony przecinkami. Po prostu tłumaczy

WHERE 6 IN (a.allowed_activity) 

do:

WHERE 6 = a.allowed_activity


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy można zrobić klucz obcy MySQL w jednej z dwóch możliwych tabel?

  2. Wstaw wiele e-maili do mysql za pomocą jednego obszaru tekstowego

  3. Jak importować i eksportować pliki CSV za pomocą PHP i MySQL

  4. Wybierz 10 najlepszych rekordów dla każdej kategorii w MySQL

  5. Dlaczego nie mogę użyć zmiennej jako nazwy tabeli w procedurze składowanej?