Упражнение 2

Найдите производителей принтеров. Вывести: maker.

Здесь впервые встречается ошибка, характерная для нескольких задач (например, 20, 27, 28). Причина в невнимательном изучении схемы данных. Неправильное решение:

SELECT DISTINCT maker
FROM Product
WHERE model IN (SELECT model
                FROM Printer
               );
mssql
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Таким образом, для каждой строки из таблицы Product проверяется, есть ли такая модель в таблице Printer. Связь между этими таблицами (один-ко-многим) допускает наличие модели в таблице Product, которая отсутствовала бы в таблице Printer.

Пусть, например, фирма занимается ремонтом принтеров. При этом в таблице Product содержится информация обо всех известных моделях принтеров, а в таблице Printer только о тех, которые обслуживает фирма. Например, если фирма не занимается ремонтом принтеров Sharp, то модели Sharp будут находиться в таблице Product, а в таблице Printer - нет.

В результате мы можем потерять производителя принтеров, если его моделей нет среди обслуживаемых (в таблице Printer). Как уже говорилось при обсуждении схемы данных, тип продукции в таблице Product, задается атрибутом type, который и упускается из виду.

Если вам еще не ясно, как решить эту задачу, загляните в главу «Подсказки и решения».

Важно

Если к данной задаче имеется пояснение или приведен вариант правильного решения, в конце анализа задачи будет ставиться ссылка на соответствующую страницу этой главы - ПиР.

Решить задачу на SQL-EX.RU