Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2009, 00:44   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию Многотабличные запросы

Вот есть такие 3 таблицы. необходимо написать такой запрос на СУБД ОРАКЛ:

Код:
Вывести список комнат в ХАИ5, в которых имеются свободные места;
Вроде на первый взгляд не сложно, но не получается сделать.
Долго думал, потратил около часа, намешал в кучу, и ничего не получилось:
Код:
SELECT 
N_ROOMS
FROM  ROOM
INNER JOIN  STUD_ADR  ON
WHERE DATA_VYSELENIA IS NULL AND N_DORMITORIES = 'XAI-5' AND
ROOM.N_ROOMS = STUD_ADR.N_ROOMS
Изображения
Тип файла: jpg 1.jpg (25.7 Кб, 76 просмотров)
Тип файла: jpg 2.jpg (30.4 Кб, 75 просмотров)
Тип файла: jpg 3.jpg (40.9 Кб, 77 просмотров)
Golovastik вне форума Ответить с цитированием
Старый 09.11.2009, 01:41   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ну тебе надо подсчитать кол-во студентов, которые живут в такой то комнате, сравнить это значение с вместимостью комнаты, и если оно меньше, то вывести. Но в твоей таблице stud_adr нет студентов, которые живут в одной и той же комнате. поэтому можешь пытаться написать запрос хоть год, ничего не получится))
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 09.11.2009, 02:02   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну почему? В 202-й живут как минимум 2 человека.

То Golovastik
Почему вы выбираете
SELECT N_ROOMS FROM ROOM
только одно поле?
А вместимость вас не интересует?
Из нее нужно вычитать полученное вложенным запросом количество проживающих студентов (из STUD_ADR).
И выводить только те записи, для которых эта разница больше нуля.
mihali4 вне форума Ответить с цитированием
Старый 09.11.2009, 13:00   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

таблицы спроектированы убого
каким образом установить связь между таблицами Stud_adr и Room?
возьмем ту же комнату 202:
1) с одной стороны, про нее пишут, что это ХАИ-5, на 3м этаже и вместимостью 8 (см. табл.Room)
2) с другой стороны, один студент там уже больше года живет, но в 12м общежитии, а другой жил и уже съехал, но во 2м общежитии (см. табл. Stud_adr)
и как это понимать?

для ясности приведите ДДЛ-таблиц со всеми констрейнтами/сиквенсами/триггерами
soleil@mmc вне форума Ответить с цитированием
Старый 09.11.2009, 15:20   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Вот так будет правильно:
Код:
SELECT *
  FROM room a
WHERE n_dormitories = 'XAI-5'
    AND vmestimost > ( SELECT count(*) 
                                 FROM stud_adr b 
                               WHERE a.n_rooms = b.n_rooms 
                                  AND b.data_vyselenia IS NULL )
Golovastik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы к БД limon PHP 7 28.11.2008 20:29
Запросы к БД xDjarx БД в Delphi 6 14.05.2008 17:04
Многотабличные запросы! (модификация данных). MSSQL +Delphi MoGiLsHiKK БД в Delphi 1 25.12.2007 16:21
Запросы к БД H@Z@RD Общие вопросы Delphi 3 28.03.2007 01:39