Запрос: Показать склады на которых отсутствует товар
Имеем таблицы:
Покажем распределение товаров по складам:
select * from inventories order by product_id;
Покажем ассортимент каждого склада:
select * from inventories order by warehouse_id;
Вопрос: а как показать склады на которых нет товара?
Вот пример данных и нужного результата:

Ответы (1 шт):
Автор решения: Konst
→ Ссылка
склады на которых отсутствует товар:
select
w.warehouse_id,
w.warehouse_name
from warehouses w
where
not exists (select 1 from products p inner join inventories i on p.product_id = i.product_id and i.warehouse_id = w.warehouse_id)
order by w.warehouse_id
показывает все склады для товара в которых этот товар отсутствует:
SELECT
P.PRODUCT_ID,
W.WAREHOUSE_ID
FROM PRODUCTS P CROSS JOIN WAREHOUSES W
MINUS
SELECT
P.PRODUCT_ID,
A.WAREHOUSE_ID
FROM PRODUCTS P CROSS APPLY
(SELECT
I.PRODUCT_ID,
W.WAREHOUSE_ID
FROM INVENTORIES I INNER JOIN WAREHOUSES W ON I.WAREHOUSE_ID = W.WAREHOUSE_ID AND I.PRODUCT_ID = P.PRODUCT_ID
) A