Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Bazy danych _ Zapytanie z JOIN + 2 warunki

Napisany przez: duch4ever 14.03.2019, 19:28:52

Witam, przepraszam że taki dziwny tytuł bo sam nie wiem jak to nazwać i nie mogę też znaleźć pomocy na stacku.

Załóżmy że mamy zamówienia w bazie i statusy do zamówień i teraz chcę pobrać zamówienie które mają status AAA oraz BBB ale nie mają w historii statusu XXX.

Przykład:

  1. SELECT * FROM zamowienia z
  2. JOIN statusy_historia s ON s.id_zamowienia = z.id_zamowienia AND s.nazwa = "AAA" OR s.nazwa = "BBB" # Ale nie chce zamówień ze statusem XXX


Jedno zamówienie ma wiele statusów (relacje jeden do wielu), ja chcę te zamówienia które mają jeden z dwóch i jednocześnie nie mają trzeciego.
Rozwiązałem to warunkiem EXISTS ale baza jest duża i działa to wolno.

Napisany przez: mmmmmmm 18.03.2019, 12:00:35

  1. SELECT z.id_zamowienia FROM zamowienia z JOIN statusy_historia s ON s.id_zamowienia=z.id_zamowienia AND s.nazwa IN ('AAA', 'BBB', 'XXX')
  2. GROUP BY 1
  3. HAVING count(DISTINCT s.nazwa)>Count(DISTINCT CASE WHEN s.nazwa='xxx' THEN s.nazwa END)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)