sql server-(adventureworks)列出没有产品的供应商

rdrgkggo  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(297)

我被问到一个问题,使用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;
iibxawm4

iibxawm41#

使用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;
ql3eal8s

ql3eal8s2#

你看的表太多了,所有的产品供应商都有产品。并非所有供应商都有产品供应商。
从那里你可以简单地使用 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
wmvff8tz

wmvff8tz3#

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)

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

相关问题