Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > sql запрос


Автор: Алкоголик 6.12.2011, 06:30
Добрый день.
Таблица  1:
 Производитель
-------------------
ID
Name

Таблица 2:
Компьютеры
-----------------
Id
IdProisvoditel
VVint


Найти производителей персональных компьютеров, у всех модели которых VVint не менее 20 Гбайт .

Определить выполняется условие для одного производителя легко:
Код

SELECT Proisvod.name, COUNT(Pctable.vvint);
 FROM ;
     PC!PCTABLE ;
    INNER JOIN PC!PROISVOD ;
   ON  Pctable.proisvod = Proisvod.id;
 WHERE (Pctable.vvint <  20);
   AND  Pctable.proisvod =  2;
 GROUP BY Proisvod.name


А можно ли средствами самого sql сделать выборку всех производителей удовлетворяющих условию?

Автор: Zloxa 6.12.2011, 08:52
обфусцированный sql-ex?

Задание 6 Обучающего этапа.

Автор: Алкоголик 6.12.2011, 10:38
А можно ссылочку?

Автор: Алкоголик 6.12.2011, 10:55
Ссылочку наше, но это не то. Там не учитывается, что все модели должны обладать винтом больше определенного размера. Если хотя бы один меньше, то производителя уже не выводим.

Автор: Zloxa 6.12.2011, 11:09
Алкоголик, где вы получили это задание?

Код

select * from Таблица1 t1 where not exists (select null from Таблица2 t2 where t1.id = t2.IdProisvoditel and t2.wint < 20)

Автор: AndreyIQ 6.12.2011, 11:12
Если я Вас правильно понял, то примерно так:
Код

SELECT Proisvod.name
FROM Proisvod
where not exists
(SELECT * FROM PC WHERE PC.vvint < 20 and PC.proisvod = Proisvod.id)

Автор: Алкоголик 6.12.2011, 11:26
Zloxa,  это вопрос из курсовой из института. Похоже что преподаватель за основу взял вопросы с sql-ex smile Но я до вас об этом сайте и не слыхал

Не столь важно, но интересно для себя. 
Если существует производитель у которого нет ни одного компьютера, то он тоже попадет же в выборку этого запроса. Как избежать этого?

Автор: Zloxa 6.12.2011, 12:01
Цитата(Алкоголик @  6.12.2011,  11:26 Найти цитируемый пост)
Не столь важно

Важно, потому что вопросы sql-ex обсуждать вне sql-ex - моветон. По крайней мере так было пару лет назад.
Цитата(Алкоголик @  6.12.2011,  11:26 Найти цитируемый пост)
Если существует производитель у которого нет ни одного компьютера, то он тоже попадет же в выборку этого запроса. Как избежать этого?


Код

select p.name 
from (
  SELECT proisvod 
  FROM PC
  group by proisvod 
  having count(case when vvint <20 then 1 end) = 0
) s
inner join Proisvod p on p.id = s.proizvod 

Цитата(Алкоголик @  6.12.2011,  11:26 Найти цитируемый пост)
это вопрос из курсовой из института

За этим в http://forum.vingrad.ru/forum/Vingrad-help-center.html.
http://segfault.kiev.ua/smart-questions-ru.html#homework!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)