Исходя из вопроса, вы хотите знать, как объединить два запроса ?
Я внес пару изменений в ваш второй запрос в список таблиц (Sizes, Available_in(Продает), я удалил «Available_in, Продает», потому что они представляют перекрестное соединение, когда помещены туда.
Я также держался подальше от интерпретации запросов, не зная фактического контекста таблиц.Однако для ясности запрос запрашивает:
Список уникальных идентификаторов товаров, в которых количество магазинов, в которых продается продукт, совпадает с количеством магазинов в таблице местоположений магазинов, где находится продукт.продается во всех магазинах.
SELECT size_option, available_in.product_id, product.product_name
FROM Sizes
JOIN available_in ON Available_in.sizes_id = Sizes.sizes_id
JOIN Product ON Product.product_id = Available_in.product_id
Существует несколько способов сделать это, в зависимости от используемой версии SQL Server. Общие выражения таблиц (CTE) были представлены в SQL Server 2005.Ниже приведены два примера.
SQL Server до 2005 г.
SELECT size_option, available_in.product_id, product.product_name
FROM Sizes
JOIN available_in ON Available_in.sizes_id = Sizes.sizes_id
JOIN Product ON Product.product_id = Available_in.product_id
WHERE product.product_id in (
SELECT product_id
FROM Sells
GROUP BY product_id
HAVING COUNT(store_location_id) = (SELECT COUNT(*) FROM store_location)
)
SQL Server 2005 и выше
WITH ProductIDList as (
SELECT product_id
FROM Sells
GROUP BY product_id
HAVING COUNT(store_location_id) = (SELECT COUNT(*) FROM store_location)
)
, ProductInfo as (
SELECT size_option, available_in.product_id, product.product_name
FROM Sizes
JOIN available_in ON Available_in.sizes_id = Sizes.sizes_id
JOIN Product ON Product.product_id = Available_in.product_id
)
SELECT *
FROM ProductInfo
JOIN ProductIDList ON ProductInfo.product_id = ProductIDList.product_id