值是 a 和 b 的类型

use*_*940 2 sql

对于给定的数据库

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Run Code Online (Sandbox Code Playgroud)

问题是: 在 RAM 最低的 PC 中,找到生产 RAM 最低的 PC 和处理器速度最高的 PC 的打印机制造商。结果集:制造商。

让我们拆分查询!

  • 查找同时生产 PC 的打印机制造商

SELECT DISTINCT maker from product Group By maker,type HAVING type IN('Printer','PC')

我认为这是错误的,因为 IN('Printer','PC') 就像 OR not AND

  • 具有最低 RAM 的 PC

SELECT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc) as minimumRam

  • 具有最低 RAM 的 PC 中速度最高的处理器
WHERE
lowestRam.speed=(SELECT MAX(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Run Code Online (Sandbox Code Playgroud)

查询本身!

SELECT DISTINCT maker FROM
(SELECT DISTINCT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc)) as lowestRam
INNER JOIN product 
ON product.model=lowestRam.model
WHERE
lowestRam.speed=(SELECT max(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Group By maker,type HAVING type IN( 'Printer' ,'PC')
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在检查站点上提交查询时,它会产生 1 个额外的错误结果:(

问题来自Link。查询验证有 2 个步骤。第二步只显示用户和正确结果之间的区别:(

小智 5

这应该可以解决您的问题:

select distinct maker from Product
where type = 'Printer' and maker in (select maker
from Product join PC on Product.model = PC.model
where ram = (select min(ram) from PC) and speed = (select max(speed) from PC 
where ram = (select min(ram) from PC)))
Run Code Online (Sandbox Code Playgroud)