SQL 服务器 - (AdventureWorks) 列出没有产品的供应商
SQL Server - (AdventureWorks) List the Vendors with no products
有人问我使用 AdventureWorks 列出所有没有产品的供应商的问题。当我 运行 我的 SELECT 语句没有返回。我究竟做错了什么? (答案只能使用连接和联合来完成 - 没有子查询)
SELECT DISTINCT pv.Name AS 'Vendors'
FROM Purchasing.Vendor pv
INNER JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
INNER JOIN Production.Product pp
ON pp.ProductID = ppv.ProductID
WHERE pp.ProductID != ppv.ProductID;
SELECT DISTINCT pv.Name AS 'Vendors'
FROM Purchasing.Vendor pv
INNER JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
where not exists (SELECT 1 Production.Product pp Where pp.ProductID = ppv.ProductID)
Return 所有没有任何产品的供应商
- 使用左连接来包含 "vendor" 没有产品的情况。内部联接将仅考虑供应商存在产品 ID 的情况。
- 现在,对 "Vendor" 进行分组并使用
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;
您查看的表格过多,所有 ProductVendors 都有产品。并非所有供应商都有 ProductVendors。
从那里您可以简单地使用 LEFT JOIN
并查找空记录。
SELECT DISTINCT v.Name
FROM Purchasing.Vendor v
LEFT JOIN Purchasing.ProductVendor pv ON pv.BusinessEntityID = v.BusinessEntityID
WHERE pv.BusinessEntityID IS NULL
有人问我使用 AdventureWorks 列出所有没有产品的供应商的问题。当我 运行 我的 SELECT 语句没有返回。我究竟做错了什么? (答案只能使用连接和联合来完成 - 没有子查询)
SELECT DISTINCT pv.Name AS 'Vendors'
FROM Purchasing.Vendor pv
INNER JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
INNER JOIN Production.Product pp
ON pp.ProductID = ppv.ProductID
WHERE pp.ProductID != ppv.ProductID;
SELECT DISTINCT pv.Name AS 'Vendors'
FROM Purchasing.Vendor pv
INNER JOIN Purchasing.ProductVendor ppv
ON pv.BusinessEntityID = ppv.BusinessEntityID
where not exists (SELECT 1 Production.Product pp Where pp.ProductID = ppv.ProductID)
Return 所有没有任何产品的供应商
- 使用左连接来包含 "vendor" 没有产品的情况。内部联接将仅考虑供应商存在产品 ID 的情况。
- 现在,对 "Vendor" 进行分组并使用
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;
您查看的表格过多,所有 ProductVendors 都有产品。并非所有供应商都有 ProductVendors。
从那里您可以简单地使用 LEFT JOIN
并查找空记录。
SELECT DISTINCT v.Name
FROM Purchasing.Vendor v
LEFT JOIN Purchasing.ProductVendor pv ON pv.BusinessEntityID = v.BusinessEntityID
WHERE pv.BusinessEntityID IS NULL