Запрос: Показать склады на которых отсутствует товар

Имеем таблицы: введите сюда описание изображения Покажем распределение товаров по складам:

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
→ Ссылка