Задача: Вывести товары, которые НЕ продавались в данном промежутке времени

Решение №1 с помощью WHERE EXISTS

Одним способом задача решена. Но хочется также решить только с помощью JOIN.

SELECT pr.product_id, pr.product_name, o.order_date
FROM products AS pr
JOIN order_details AS od ON pr.product_id = od.product_id 
JOIN orders AS o ON od.order_id = o.order_id 
WHERE o.order_date BETWEEN '1997-02-01' AND '1997-02-15' 
ORDER BY pr.product_id

В результате выводит товары, которые ПРОДАВАЛИСЬ, а нужно НЕ продавались. Помогите плз.


Ответы (2 шт):

Автор решения: Aziz Umarov

Как-то так

SELECT distinct pr.product_id, pr.product_name
FROM products AS pr
JOIN order_details AS od ON pr.product_id = od.product_id 
LEFT JOIN orders AS o ON od.order_id = o.order_id 
 AND o.order_date BETWEEN '1997-02-01' AND '1997-02-15' 
WHERE o.order_id IS NULL
ORDER BY pr.product_id
→ Ссылка
Автор решения: Akina
    SELECT product_id, product_name 
    FROM products 
EXCEPT 
    SELECT pr.product_id, pr.product_name
    FROM products AS pr
    JOIN order_details AS od ON pr.product_id = od.product_id 
    JOIN orders AS o ON od.order_id = o.order_id 
    WHERE o.order_date BETWEEN '1997-02-01' AND '1997-02-15' 
→ Ссылка