我正在使用northwind数据库,我的练习是:
哪些供应商提供同一类别的两种产品?显示公司名称,类别和两个产品名称
我的代码:
SELECT DISTINCT
c.CategoryID, s.CompanyName, p1.ProductName, p2.ProductName
FROM
Suppliers s
INNER JOIN
Products p1 ON s.SupplierID = p1.SupplierID
INNER JOIN
Products p2 ON p1.CategoryID = p2.CategoryID
AND p1.ProductID <> p2.ProductID
INNER JOIN
Categories c ON p2.CategoryID = c.CategoryID
GROUP BY
c.CategoryID,s.CompanyName, p1.ProductName, p2.ProductName`
如何使用COUNT()
对其进行过滤?我尝试使用HAVING
进行过滤,但我失败了。
我会感激一些帮助,这会让我恢复正常的方式。
答案 0 :(得分:0)
您可以使用以下查询获取两个产品的供应商/类别列表:
select supplierId, categoryId
from products
group by supplierId, categoryId
having count(*) = 2;
然后,编写查询以显示供应商和产品名称,并使用上述内容过滤该查询的结果。您可以使用exists
或其他join
。
答案 1 :(得分:0)
根据Gordon的回答,下面的代码将获得您需要的所有数据。如果您必须将两个产品放在同一行,则可以使用pivot
:
select s.CompanyName
,p.ProductName
from Suppliers s
-- This join filters your Suppliers table to only those with two Products in the same Category
inner join (select SupplierID
,CategoryID
from Products
group by SupplierID
,CategoryID
having count(1) = 2
) pc
on(s.SupplierID = pc.SupplierID)
-- This join returns the two products in the Category returned in the join above.
inner join Products p
on(s.SupplierID = p.SupplierID
and pc.CategoryID = p.CategoryID
)