繁体   English   中英

SQL选择所有匹配项

[英]SQL selecting all that matches

我从SQL-EX.RU获得了这个SQL查询练习(#71)

本练习涉及两个表:

  1. 产品(制造商,型号,型号)
  2. PC(代码,型号,速度,内存,高清,CD,价格)

问题是:找到所有在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM