[英]SQL selecting all that matches
我从SQL-EX.RU获得了这个SQL查询练习(#71)
本练习涉及两个表:
问题是:找到所有在PC表中拥有所有PC型号的PC制造商。
我写的版本是:
SELECT maker FROM
(SELECT maker, sum(cast(model1 as int)) as sum1, sum(cast(model2 as int)) as sum2 FROM
(SELECT p.maker, p.model as model1, pc.model as model2 FROM product AS p
FULL JOIN pc ON p.model = pc.model
WHERE p.type = 'PC') AS a
GROUP BY maker) b
WHERE sum1 = sum2
但它没有完美的解决,任何人都可以指出我错在哪里或提供更好的解决方案? 谢谢!
这应该工作:
Select Maker
From Products
Where Maker Not In
(
Select P.Maker -- If one product is not in PC table PC.Code will be null
From Products P
Left Join PC On PC.Model = P.Model
Where PC.Code Is Null
)
我认为以下效果很好。 它很容易理解,可以很容易地修改它来执行其他功能(“找到所有只缺1的人”等)
SELECT maker
FROM (
SELECT maker,
SUM(CASE WHEN PC.model is null THEN 1 ELSE 0 END) AS missing_count
FROM Product
LEFT JOIN PC ON Product.model = PC.model
GROUP BY maker
) x
WHERE missing_count = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.