Упражнение 2
Здесь впервые встречается ошибка, характерная для нескольких задач (например, 20, 27, 28). Причина в невнимательном изучении схемы данных. Неправильное решение:
SELECT DISTINCT maker
FROM Product
WHERE model IN (SELECT model
FROM Printer
);
[[ column ]] |
---|
[[ value ]] |
Таким образом, для каждой строки из таблицы Product проверяется, есть ли такая модель в таблице Printer. Связь между этими таблицами (один-ко-многим) допускает наличие модели в таблице Product, которая отсутствовала бы в таблице Printer.
Пусть, например, фирма занимается ремонтом принтеров. При этом в таблице Product содержится информация обо всех известных моделях принтеров, а в таблице Printer только о тех, которые обслуживает фирма. Например, если фирма не занимается ремонтом принтеров Sharp, то модели Sharp будут находиться в таблице Product, а в таблице Printer - нет.
В результате мы можем потерять производителя принтеров, если его моделей нет среди обслуживаемых (в таблице Printer). Как уже говорилось при обсуждении схемы данных, тип продукции в таблице Product, задается атрибутом type, который и упускается из виду.
Если вам еще не ясно, как решить эту задачу, загляните в главу «Подсказки и решения».
Важно
Если к данной задаче имеется пояснение или приведен вариант правильного решения, в конце анализа задачи будет ставиться ссылка на соответствующую страницу этой главы - ПиР.