MySQL podzapytanie WHERE IN()

MySQL podzapytanie WHERE IN()
NewUser2k13
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 217
0

W mojej bazie mam klientów do których wysyłane są towary.
Klienci łączeni są w grupy i wysyłane są do nich jakieś przedmioty. Czasem do wszystkich te same, czasem z lekkimi zmianami (np tylko 1 produkt dla jednego klienta w grupie się różni). Potrzebuję zapytania, które zwróci tylko te przedmioty, które w danej grupie są takie same dla każdego.
Przykład:
GRUPA I

  • User 1: towarA, towarB, towarC
  • User 2: towarA, towarC, towarD
  • User 3: towarA, towarB, towarC
    wspólne elementy, to towarA oraz towarC

DEMO
https://www.db-fiddle.com/f/ktYeKF6Ka7KV3NZTLh9aGe/0

Mam tutaj pierwsze zapytanie, które dla warunku
WHERE column_name IN przyjmuje podzapytanie
Samo podzapytanie zwraca to czego oczekuję - czyli żądaną kolumnę połączoną przecinkami (linijka nr. 15).
Jednak całe zapytanie nie zwraca zupełnie nic.
Gdy to podzapytanie zastąpię wpisanymi z palca wartościami id_shipping IN (1,2) to już wszystko działa prawidłowo.

Jakieś pomysły co przeoczyłem?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

group_concat zwraca ciąg znaków, więc:

Kopiuj
id_shipping IN (
  SELECT GROUP_CONCAT(id_shipping SEPARATOR ', ') FROM customer_to_schedule WHERE id_schedule=1
)

... oznacza:

Kopiuj
id_shipping IN (
  "1,2"
) 

... a nie to co myślisz :-)

Całe szczęście, rozwiązanie jest proste:

Kopiuj
id_shipping IN (
  SELECT id_shipping FROM customer_to_schedule WHERE id_schedule=1
)

(zamiast podzapytania, możesz też wykorzystać JOIN.)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.