• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL - na rozruszanie umysłu (logika)

Cloud VPS
0 głosów
245 wizyt
pytanie zadane 22 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

Potrzebuję wyciągnąc klientów i email którzy, zamówili w roku 2022 jakąkolwiek książkę i kiedykolwiek książkę konkretnego autora (dajmy na to Sienkiewicza)

mam 3 tabele. 

1. Customer (zawiera customer_id i email)

2. ORDER (zawiera informację o zamówieniach)

3. details_order (informacje o autorach. Sienkiewicz ma numer 82) 

Czy poniższa logika jest logiczna? : ). Generalnie mam wątpliwości gdy pojawia się 3 tabela. Czy żeby takiego exita zrobić to czy nie potrzebuję zrobić JOINA z detail_orders

W skrócie wygląda to tak

SELECT customer_id, email
FROM customer as c
WHERE exists ( SELECT 1 
                           FROM order as o
                          WHERE c.customer_id = o.customer_id
                           AND o.order_id = details_order.order_id
                           AND autor = '82') AND 
                           (SELECT 1
                            FROM order as o 
                            WHERE c.customer_id = o.customer
                             AND data >='202201'  )

 

komentarz 22 lutego 2023 przez Wiciorny Ekspert (281,530 p.)
a, czy oczekiwany zestaw danych został zwrócony z tego zapytania?

1 odpowiedź

+1 głos
odpowiedź 22 lutego 2023 przez Wiciorny Ekspert (281,530 p.)

Generalnie mam problem z tym selektem zagnieżdżonym, który logicznie nie ma sensu. Dlaczego nie JOIN ? 

np. 
 

SELECT c.customer_id, c.email
FROM customer c
WHERE EXISTS (
  SELECT 1 
  FROM order o 
  JOIN details_order do ON o.order_id = do.order_id
  WHERE c.customer_id = o.customer_id
    AND do.autor = '82'
    AND o.data >= '2022-01-01'
    AND o.data < '2023-01-01'
);

Twoje dwa selekty zagnieżdzone  zawieraja warunki, które nie są związane z żadną z tabel, a zamiast tego porównują wartości kolumn order_id, autor, customer_id i data z wartościami w tabeli customer.
 

Pierwszy SELECT (zewnętrzny) próbuje znaleźć klientów, którzy mieli przynajmniej jedno zamówienie z książką Sienkiewicza, ale w rzeczywistości nie odwołuje się do tabeli details_order, co powoduje błąd w składni.

Drugi SELECT (zagnieżdżony) próbuje znaleźć klientów, którzy mieli przynajmniej jedno zamówienie w 2022 roku, ale ponownie odwołuje się do tabeli order zamiast do tabeli details_order.

A generalnie masz dwa selekty, które odwołują się do tej samej tabeli... 
co się stało z tabelą 3. details_order (informacje o autorach. Sienkiewicz ma numer 82)? Do której się nie odwołujesz praktycznie 

Podobne pytania

0 głosów
1 odpowiedź 175 wizyt
pytanie zadane 30 czerwca 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)
0 głosów
1 odpowiedź 663 wizyt
pytanie zadane 9 marca 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 23 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

93,482 zapytań

142,414 odpowiedzi

322,761 komentarzy

62,894 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...