loading..
Русский    English
11:30
листать

Упражнение 18 (подсказки и решения)

В следующем решении:

Консоль
Выполнить
  1. SELECT c.maker, a.priceA price
  2. FROM (SELECT MIN(price) priceA
  3. FROM Printer
  4. WHERE Color ='y'
  5. ) a INNER JOIN
  6. Printer b ON a.priceA = b.price INNER JOIN
  7. Product c ON b.model = c.model;
в подзапросе определяются минимальная цена на цветные принтеры, затем выполняется соединение по этой цене с таблицей принтеров, чтобы найти все принтеры с такой ценой. Наконец, соединение с таблицей Product дает производителей найденных принтеров.

Конечно, соединение по цене можно заменить простым сравнением

  1. WHERE price = (SELECT MIN(price) priceA
  2. FROM Printer
  3. WHERE Color ='y'
  4. )

Однако ошибка не в этом, а в том, что отыскиваются любые принтеры, у которых цена совпадает с минимальной ценой на цветные принтеры, что, собственно говоря, и имеет место. В результате получаем:

Maker Price
D 270.0
A 270.0

Правильный же ответ дает только одну строку:

Maker Price
D 270.0

Вторая строка не является цветным принтером, в этом легко убедиться, если добавить в предложение SELECT дополнительные столбцы:

  1. SELECT c.maker, a.priceA price, color, b.type

что дает

maker price color type
D 270.0 y Jet
A 270.0 n Matrix

Вторая ошибка заключается в возможном наличии дубликатов, т. к. для одного и того же производителя может иметься несколько принтеров по одной и той же цене.

Перейти к обсуждению упражнения 18

Решить упражнение на SQL-EX.RU


Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE Convert COUNT CROSS APPLY CTE DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MONTH MySQL NOT Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100