SQL задачка с загадочным подвохом

MySQL, PostgreSQL, MSSQL, Oracle и т.д. Диалекты SQL, формирование запросов, хранимые процедуры, тригерры, транзакции и многое другое

SQL задачка с загадочным подвохом

Сообщение hoskin 18 мар 2010, 14:21

Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.

Найдите производителей самых дешевых цветных принтеров. Вывести: maker, price

Решить надо вот на этом сайтике
http://sql-ex.ru/learn_exercises.php?LN=18

Вроде совсем простенькая задачка. Но есть какой-то загадочный подвох

Код: Выделить всё
SELECT maker, price
FROM printer
INNER JOIN product ON product.model = printer.model
WHERE printer.price IN
   (SELECT min(price)
    FROM printer
    WHERE color = 'y'
    )
and color='y'


Ответ на запрос:

Код: Выделить всё
Неверно.
Ваш запрос вернул правильные данные на основной базе, но не прошел тест на проверочной базе.
* Неверное число записей (больше на 1)
На эту задачу есть FAQ

Результат выполнения Вашего запроса:
maker   price
D   270.0000
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович

Re: SQL задачка с загадочным подвохом

Сообщение Vladislav_133 18 мар 2010, 14:45

Мне, честно говоря, некогда читать, что написано на указанном сайте. Создайте эту базу днных на каком-либо СУБД и проверьте запрос. Я и сам проверю, но чуть позднее. Поступайте так, а не проверяйте на разных решателях, они могут и ошибаться.
На первый взгляд все верно.
Последний раз редактировалось Vladislav_133 19 мар 2010, 12:00, всего редактировалось 1 раз.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: SQL задачка с загадочным подвохом

Сообщение Vladislav_133 18 мар 2010, 15:39

Я не знаю, что имели в виду авторы задачи, но правильным будет следующий запрос.
Код: Выделить всё
SELECT maker, price
FROM printer
INNER JOIN product ON product.model = printer.model
WHERE printer.price IN
   (SELECT min(price)
    FROM printer
    WHERE color = 'y'
    )
and color='y' and product.type='Printer'
Из вашего текста можно предположить, что ключ model уникален для конкретного производителя и конкретного типа, т.е. если возьмем другого производителя, то у него может оказаться уже существующее значение model, но для другого типа продукции. Это единственное предположение, а так все правильно.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1386
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

Re: SQL задачка с загадочным подвохом

Сообщение hoskin 22 май 2010, 19:40

Овечка Долли была клонирована с 277 попытки. И ведь не сдавались упорные британские ученые. Спустя почти что полгода я вернулся с посвежевшей головой к этому гордиеву узлу

От верного решения отделяло одно слово:
Код: Выделить всё
select DISTINCT maker, price
from printer a
inner join product b on (a.model=b.model)
where price=
(select min(price)
from printer
inner join product on (maker=maker)
where color='y')
and color='y'


Я счастлив как слон!
hoskin
 
Сообщения: 22
Зарегистрирован: 27 окт 2009, 13:28
Полное имя: Иванов Алексей Викторович


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron