To jest niepoprawne ... po pierwsze nie ma warunku złączenia ON... na tabelach łączonych
Klauzula WHERE nie będzie dotyczyć złączenia.
Co ze złączeniem z tabelą order adres, aby mieć dostęp do danych ?
Dodatkowo kolejno, w zapytaniu nie ma instrukcji, która określałaby, że klienci, którzy nie dokonali zakupów w 2022 roku, nie powinni być uwzględniani.
Warunek nie odfiltruje wczesniej bo brakuje Ci podstaw składania zapytania SQL, kolejność nie jest taka jak piszesz
https://akademia-vba.pl/2020/05/20/podstawy-sql-kolejnosc-klauzul-w-select
.
Kolejność wykonywania klauzul w SQL jest następująca:
- FROM - wskazuje z jakich tabel pobierane są dane
- JOIN - łączy dane z dwóch lub więcej tabel
- WHERE - określa warunki filtrowania wierszy
- GROUP BY - grupuje dane w określony sposób
- HAVING - określa warunki filtrowania dla grup
- SELECT - wybiera konkretne kolumny i/lub wyliczenia z tabeli lub tabel, a także określa kolejność sortowania
- DISTINCT - usuwa duplikaty z wyniku zapytania
- UNION/INTERSECT/EXCEPT - łączy wyniki zapytań z kilku tabel
- ORDER BY - określa kolejność sortowania wyników
- LIMIT/OFFSET - ogranicza ilość wyników zapytania.
Spradz to zapytanie:
SELECT c.customer_id, o.order_id
FROM customer AS c
INNER JOIN orders AS o ON c.customer_id = o.customer_id
INNER JOIN order_address AS oa ON o.order_id = oa.order_id
WHERE o.date BETWEEN '2022-01-01' AND '2022-12-31'
AND oa.country <> 'PL'
AND c.customer_id IN (SELECT customer_id FROM orders WHERE date BETWEEN '2022-01-01' AND '2022-12-31');
Dodany jest warunek, aby warunek, który wymaga, aby adres zamówienia był inny niż 'PL' oraz
warunek IN, który ogranicza wyniki do klientów, którzy złożyli zamówienie w 2022 roku.