Как найти товар, который продается во всех магазинах - PullRequest
0 голосов
/ 30 января 2019

У меня есть таблица с магазинами (id, shop_name, address) и другая таблица продаж (shops_id, product_id, product_name, цена, количество).Как я могу показать товар, который продается во всех магазинах?

Моя логика заключается в том, что я отслеживаю количество магазинов, которых 10, и если товар продается во всех этих 10 магазинах, но все еще нет.работа.

select product_id, product_name from sales
join shops on sales.shopsid = shops.id
group by(product_id, product_name)
having count(shop_name) = 10;

результатом должны быть идентификатор продукта и название продукта, который продается во всех магазинах.

Ответы [ 2 ]

0 голосов
/ 30 января 2019
-- The question states: Find the products that were sold in EVERY shop
-- This is equivalent to: Find products for which "There does NOT EXIST a shop that did NOT sell the product"
-- This leads to the double "NOT EXISTS (NOT EXISTS())" solution to relational division.::

SELECT *
FROM product c
WHERE NOT EXISTS (
        -- find a shop that did not sell our product
        SELECT * FROM shop b 
        WHERE NOT EXISTS (
                -- {product X shop} should not exist
                SELECT * FROM sales nx
                WHERE nx.product_id = c.product_id 
                AND nx.shop_id = b.shop_id
                )
        )
        ;
0 голосов
/ 30 января 2019

Вы можете использовать агрегацию, но я думаю, что вам нужно count(distinct):

select s.product_id, s.product_name
from sales s
group by s.product_id, s.product_name
having count(distinct s.shop_id) = (select count(*) from shops);
...