Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Объясните пожалуйста почему не работает запрос :)  [new]
sqlнуб
Guest
http://sql-ex.ru/ -> Упражнения по SQL -> SELECT (обучающий этап) -> упражнение 23

цитирую условия:
Схема БД состоит из четырех таблиц:
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.


цитирую задачу:
Перечислите номера моделей любых типов, имеющих самую высокую цену по всей имеющейся в базе данных продукции.

предполагаемое решение:
SELECT maker FROM Product
LEFT JOIN PC ON product.model = pc.model
LEFT JOIN Laptop ON product.model = laptop.model
WHERE pc.speed >= 750 AND laptop.speed >= 750
25 июл 11, 18:09    [11024718]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
sqlнуб
Guest
ошибся:
*Найдите производителей, которые производили бы как ПК
со скоростью не менее 750 МГц, так и ПК-блокноты со скоростью не менее 750 МГц.
Вывести: Maker
25 июл 11, 18:11    [11024731]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
автор
a) вы не должны публиковать формулировки задач и просить помощи в их решении на стороне;
b) в затруднительных случаях вы можете попросить помощи, написав разработчикам.
При нарушении пункта a) мы оставляем за собой право применить репрессивные меры вплоть до удаления учетной записи.
http://sql-ex.ru/faq.php#ref_rating
25 июл 11, 18:27    [11024791]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
select distinct Product.maker
from Product
  join PC on Product.type == 'PC' and PC.model = Product.model
  join Laptop on Product.type == 'Laptop' and Laptop.model = Product.model
where PC.speed >= 750 and
  Laptop.speed

вы забыли указать тип в соединении
25 июл 11, 18:33    [11024823]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
Гадя Петрович
автор
a) вы не должны публиковать формулировки задач и просить помощи в их решении на стороне;
b) в затруднительных случаях вы можете попросить помощи, написав разработчикам.
При нарушении пункта a) мы оставляем за собой право применить репрессивные меры вплоть до удаления учетной записи.
http://sql-ex.ru/faq.php#ref_rating


упс пока писал не увидел

ЗЫ удалите мой пост, если что
25 июл 11, 18:34    [11024825]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
можно не удалять, все равно он не правильный =)
25 июл 11, 18:34    [11024831]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
sqlнуб
Guest
это все замечательно :)
ну я все это не для сертификатов / рейтингов делаю

я действительно не понимаю, почему не работает условие where в данном случае.
можно не объяснять как нужно делать, но объясните пожалуйста логику.
25 июл 11, 18:41    [11024857]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
sqlнуб, не стоит публиковать здесь задачи, лучше почитайте http://www.sql-tutorial.ru/book_exercise_23.html
25 июл 11, 18:57    [11024963]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
sqlнуб
я действительно не понимаю, почему не работает условие where в данном случае.
можно не объяснять как нужно делать, но объясните пожалуйста логику.
SQL - он как простой английский язык.

Вы выбираете запись из таблицы продукт
FROM Product
которая является PC:
LEFT JOIN PC ON product.model = pc.model
и одновременно Laptop:
LEFT JOIN Laptop ON product.model = laptop.model

Таким образом, получается product.model = laptop.model = pc.model

При этом у вас в условии записано, что
WHERE pc.speed >= 750 AND laptop.speed >= 750
то есть записи в Laptop и PC должны быть одновременно для этой записи в таблице Product
25 июл 11, 19:35    [11025138]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
sqlнуб
Guest
alexeyvg,

Ну так по идее все верно, задача должна решаться
25 июл 11, 20:01    [11025216]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
sqlнуб
alexeyvg,

Ну так по идее все верно, задача должна решаться


а с чего вы решили что коды ПК и ПК-блокнотов совпадают?
И даже и есть такие ситуации, то явнно должны и не совпадать

вот пример
Market Code PC speed LapTop Speed
1 1000 800 Null
1 1001 800 Null
1 1002 Null 900

данный продавец подходит ?
26 июл 11, 09:12    [11026232]     Ответить | Цитировать Сообщить модератору
 Re: Объясните пожалуйста почему не работает запрос :)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
sqlнуб
alexeyvg,

Ну так по идее все верно, задача должна решаться
По идее, по этой схеме данных, не должно быть ни одного продукта, который вляется одновременно и PC и Laptop. Соответственно, такой запрос никогда не вернёт ни одной записи.
26 июл 11, 09:25    [11026251]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить