Я пытаюсь решить упражнение 25 из sql-ex.ru:
Схема базы данных состоит из четырех таблиц:
- Продукт (производитель, модель, тип)
- ПК (код, модель, скорость, ram, hd, cd, цена)
- Ноутбук (код, модель, скорость, ram, hd, экран, цена)
- Принтер (код, модель, цвет, тип, цена)
Найдите производителей принтеров, которые также выпускают ПК с наименьшей емкостью оперативной памяти и максимальной скоростью процессора на всех ПК, имеющих самую низкую емкость ОЗУ. Набор результатов: создатель.
Я не понимаю, почему следующий запрос не дает желаемого результата во второй контрольной базе данных:
SELECT DISTINCT product.maker
FROM product
RIGHT JOIN printer ON printer.model = product.model
WHERE product.maker IN(
SELECT product.maker
FROM product
RIGHT JOIN pc ON pc.model = product.model
WHERE pc.ram = (SELECT MIN(ram) FROM pc)
AND pc.speed = (
SELECT MAX(t.speed)
FROM (SELECT speed FROM pc WHERE ram = (SELECT MIN(ram) FROM pc)) AS t
)
)
Ошибка заключается в следующем:
Wrong
Your query produced correct result set on main database, but it failed test on second, checking database
* Wrong number of records (less by 1)
Почему он не может выбрать ровно 1 производителя?
Я не знаю, где ошибка в вашем запросе, но вы можете использовать что-то вроде этого:
WITH t AS
(
SELECT * FROM PC c WHERE c.ram = (SELECT MIN(ram) FROM PC)
)
SELECT DISTINCT a.maker
FROM Product a WHERE a.type = 'PC' AND a.maker IN
(
SELECT b.maker FROM Product b WHERE b.type = 'Printer'
) AND a.model IN
(
SELECT model FROM t WHERE speed = (SELECT MAX(speed) FROM t)
)