mysql - SQL选择所有匹配的

标签 mysql sql sql-server sql-server-2008

我从 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

但是结果并不完美,谁能指出我错在哪里或提供更好的解决方案?谢谢!

最佳答案

我认为下面的效果很好。它很容易理解并且可以很容易地修改以执行其他功能(“找到所有只丢失 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

关于mysql - SQL选择所有匹配的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38464520/

相关文章:

sql - MySQL 有没有办法选择返回行的开头和结尾的顺序?

sql-server - 估计数据库大小

mysql - 解释magento数据库结构

javascript - 字符串修改

mysql - Bash Echo 命令在 while 循环中表现异常

sql - 在sql中的组表达式中使用 "where"

sql - 删除SQL表中的分层数据

c# - 无法将子字符串发送到数据库

sql-server - 这些 sys.sp_* 存储过程在做什么?

mysql - 我如何通过单个查询将数据插入到2个表中