loading..
Русский    English
22:01
листать

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

Для решения этой задачи используется обычно два подхода: соединение с последующим выбором нужной строки и проверка на попадание производителя в два списка. Следующее неправильное решение, реализует первый подход:

Решение 4.11.1

Консоль
Выполнить
  1. SELECT DISTINCT a.maker
  2. FROM Product a LEFT JOIN
  3.      PC b ON a.model = b.model AND
  4.              b.speed> =750 LEFT JOIN
  5.      Laptop c ON a.model = c.model  AND c.speed> =750
  6. WHERE NOT (b.model IS NULL AND
  7.            c.model IS NULL
  8.            );

Это еще один вариант на тему «чего-то одного». Действительно, модель уникальна, т. е. она представляет собой либо ПК, либо портативный компьютер. В результате внешних соединений получаются строки типа:

  1. maker model (PC) NULL

или

  1. maker NULL model (laptop)

Однако здесь не может быть строк:

  1. maker model (PC) model (laptop)

поскольку соединение выполняется по номеру модели.

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

Решение 4.11.2

Для демонстрации второго подхода рассмотрим следующий вариант:

Консоль
Выполнить
  1. SELECT DISTINCT t.maker
  2. FROM Product t
  3. WHERE (t.model IN (SELECT model
  4.                    FROM PC
  5.                    WHERE speed >= 750
  6.                    ) OR
  7.        t.model IN (SELECT model
  8.                    FROM Laptop
  9.                    WHERE speed >= 750
  10.                    )
  11.        ) AND
  12.        EXISTS (SELECT *
  13.                FROM Product
  14.                WHERE Product.maker = t.maker AND
  15.                      Product.type='PC'
  16.                ) AND
  17.        EXISTS (SELECT *
  18.                FROM Product
  19.                WHERE Product.maker = t.maker AND
  20.                Product.type='Laptop'
  21.                );
который можно прочитать следующим образом: найти производителя, который выпускает ПК со скоростью не менее 750 МГц или портативный компьютер со скоростью не менее 750 МГц; при этом данный производитель должен производить ПК и портативные компьютеры. Несомненный прогресс этого решения по сравнению с решением 1.15.1 состоит в том, что выводятся производители, как ПК, так и портативных компьютеров. Однако это решение допускает вариант, когда производитель выпускает только ПК со скоростью более 750 МГц, в то время как все его портативные компьютеры имеют скорость менее 750 МГц, и наоборот.

Вернуться к обсуждению упражнения 23

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

Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY 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 Больше тэгов
Учебник обновлялся
несколько дней назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100