To jest to samo, co zostało zadane w tym pytaniu:Czy mogę powiązać tablicę z warunkiem IN()?
Odpowiedź była taka, dla listy o zmiennej wielkości w in
klauzula, musisz samodzielnie skonstruować zapytanie.
Jednak możesz użyć cytowanej listy oddzielonej przecinkami, używając find_in_set
, chociaż w przypadku dużych zestawów danych miałoby to znaczny wpływ na wydajność, ponieważ każda wartość w tabeli musi być rzutowana na typ char.
Na przykład:
select users.id
from users
join products
on products.user_id = users.id
where find_in_set(cast(products.id as char), :products)
Lub, jako trzecia opcja, możesz utworzyć funkcję zdefiniowaną przez użytkownika, która podzieli listę oddzieloną przecinkami (por. http://www.slickdev.com/2008/09/15/mysql-query-real-values-from-delimiter-separated-string-ids /
). Jest to prawdopodobnie najlepsza opcja z tych trzech, zwłaszcza jeśli masz wiele zapytań, które opierają się na in(...)
klauzule.