• 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)

Object Storage Arubacloud
0 głosów
117 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 (269,510 p.)
a, czy oczekiwany zestaw danych został zwrócony z tego zapytania?

1 odpowiedź

+1 głos
odpowiedź 22 lutego 2023 przez Wiciorny Ekspert (269,510 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ź 91 wizyt
pytanie zadane 30 czerwca 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)
0 głosów
1 odpowiedź 392 wizyt
pytanie zadane 9 marca 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)
0 głosów
1 odpowiedź 73 wizyt
pytanie zadane 23 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

92,525 zapytań

141,357 odpowiedzi

319,388 komentarzy

61,914 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...