Mysql SQL Server-(AdventureWorks)列出没有产品的供应商

Mysql SQL Server-(AdventureWorks)列出没有产品的供应商,mysql,sql,select,adventureworks,Mysql,Sql,Select,Adventureworks,我被问到一个问题,使用AdventureWorks列出所有没有产品的供应商。运行SELECT语句时,不会返回任何内容。我做错了什么?(只能使用联接和联合进行回答-无子查询) 退回所有没有任何产品的供应商 使用left join可包括“供应商”没有产品的情况。内部连接只考虑那些存在供应商的产品ID的情况。 现在,对“供应商”进行分组,并使用count()函数计算产品数量 最后,使用HAVING子句筛选出计数为零的供应商 请尝试以下操作: SELECT pv.Name AS 'Vendors',

我被问到一个问题,使用AdventureWorks列出所有没有产品的供应商。运行SELECT语句时,不会返回任何内容。我做错了什么?(只能使用联接和联合进行回答-无子查询)

退回所有没有任何产品的供应商

  • 使用left join可包括“供应商”没有产品的情况。内部连接只考虑那些存在供应商的产品ID的情况。
  • 现在,对“供应商”进行分组,并使用
    count()
    函数计算产品数量
  • 最后,使用
    HAVING
    子句筛选出计数为零的供应商
请尝试以下操作:

SELECT pv.Name AS 'Vendors', 
       Count(pp.ProductID) AS count_products 
FROM Purchasing.Vendor pv
LEFT JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
LEFT JOIN Production.Product pp
ON pp.ProductID = ppv.ProductID 
GROUP BY pv.Name 
HAVING count_products = 0;

您看到的表太多了,所有产品供应商都有产品。并非所有供应商都有产品供应商

从那里,您可以简单地使用
左连接
并查找空记录

SELECT DISTINCT v.Name
FROM Purchasing.Vendor v
LEFT JOIN Purchasing.ProductVendor pv ON pv.BusinessEntityID = v.BusinessEntityID
WHERE pv.BusinessEntityID IS NULL

pp.ProductID=ppv.ProductID
with
pp.ProductID!=ppv.ProductID
。。。不返回任何行是很自然的…@MEnf我以前也尝试过,但它会返回所有供应商。根据说明,答案不能是子查询。我得到的count\u portudes的列名无效error@CameronCole也许你把我的问题抄错了。这是count_产品。有一个typo@DerrickMoeller在MySQL中,我们可以很好地使用
中的别名Having
。阅读“您可以在GROUP BY、ORDER BY或HANG子句中使用别名来引用列”-很公平,我错过了标签。啊,是的,谢谢,谢谢!我知道我必须把事情复杂化。
SELECT pv.Name AS 'Vendors', 
       Count(pp.ProductID) AS count_products 
FROM Purchasing.Vendor pv
LEFT JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
LEFT JOIN Production.Product pp
ON pp.ProductID = ppv.ProductID 
GROUP BY pv.Name 
HAVING count_products = 0;
SELECT DISTINCT v.Name
FROM Purchasing.Vendor v
LEFT JOIN Purchasing.ProductVendor pv ON pv.BusinessEntityID = v.BusinessEntityID
WHERE pv.BusinessEntityID IS NULL