SQL搜索仅提供两种不同产品的供应商
这是一个使用子查询的家庭作业问题,教授给出的最接近的例子没有那么大帮助。我们基本上有一个大的产品表,其中有相关的行SQL搜索仅提供两种不同产品的供应商,sql,Sql,这是一个使用子查询的家庭作业问题,教授给出的最接近的例子没有那么大帮助。我们基本上有一个大的产品表,其中有相关的行ProductID、SupplierID、CategoryID。 我需要编写一个查询,返回恰好提供两类商品的所有供应商 我有类似的东西 select Products.SupplierID, CompanyName, Products.CategoryID, CategoryName from Products join Categories ON Products
ProductID、SupplierID、CategoryID
。
我需要编写一个查询,返回恰好提供两类商品的所有供应商
我有类似的东西
select Products.SupplierID, CompanyName, Products.CategoryID, CategoryName
from Products
join Categories ON Products.CategoryID = Categories.CategoryID
join SUPPLIERS ON Products.SupplierID = Suppliers.SupplierID
where Products.SupplierID = ANY (select top 3 with ties Products.SupplierID
from Products
group by Products.SupplierID
order by count(*) desc);
就拿例子来说,where语句是不对的,我真的不知道从哪里开始。我不是要求任何人帮我解决这个问题,但如果你能为我指出正确的方向,我将不胜感激
SELECT
SupplierId
FROM
Products
GROUP BY
SupplierId
HAVING
COUNT(DISTINCT CategoryID) = 2
如果您不需要实际的类别,您可以使用带有GROUPBY和HAVING
子句的简单聚合。拥有的就像一个,其中
在事实之后。因此,您还可以添加WHERE
语句和其他内容
注意,您实际上不需要类别
表,因为表中已经有产品id。但是,很可能您的关系有点不正常,产品
表中没有类别ID
,但您的类别
表中有产品ID
,在这种情况下,您需要这样的内容:
SELECT
Products.SupplierId
FROM
Products
INNER JOIN Categories
ON Products.ProductId = Categories.ProductId
GROUP BY
Products.SupplierId
HAVING
COUNT(DISTINCT Categories.CategoryID) = 2
如果您想要实际的类别,它会变得有点复杂,但可以用与您尝试的方式没有太大区别的方式来完成。我认为您只需要更改WHERE语句,以查找具有两个不同类别ID的供应商ID。你真的很接近了,只需删除前3名和Order by,然后在末尾添加HAVING语句,显示COUNT(DISTINCT(Products.CatigoryID))=2
我希望这能帮助您找到需要去的地方。您确实提到了子查询,所以下面是我的看法:
select *
from
@suppliers s
inner join(
select
s.supplierid,
count(distinct categoryid) cats
from
@products p
inner join @suppliers s on
p.supplierid = s.supplierid
group by
s.supplierid
having count(distinct categoryid) = 2
) supplieroftwocats on
s.supplierid = supplieroftwocats.supplierid
请用示例说明示例谢谢,这正是我所需要的!听你这么说太好了!alex为什么需要一个子查询以及您提供的代码如果您在所有供应商列上使用一个简单的group by,那么在没有子查询的情况下它将产生相同的结果。Matt分配实际上指定我们需要使用子查询ESTON,在Where语句中添加子查询也会起作用吗?