![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
nzvacarme |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.12.2013 Репутация: нет Всего: нет |
Здравствуйте, мне нужно сделать следующие запросы в базе данных "Автовокзал" (схема во вложениях):
На Select: 1) Для каждого отправляющегося сегодня автобуса определить количество свободных мест в нем. 2) Пассажиры, которые всегда ездят до одной и той же остановки. На Delete: 3) Пассажир Иванов вернул билет до Тихвина, датированный конкретным числом (произвести удаление билета из базы данных) По *1) у меня разве что получилось выбрать просто кол-во мест в автобусе, едущем "сегодня" (если вписывать дату в запрос и если в эту дату действительно имеется маршрут), примерно так это выглядит: Select [Kol_mest], Nazv_tipa from Tip_avtobusa where Nazv_tipa in (Select Nazv_tipa from Avtobusy where N_avt in (Select N_avt from Otpravlenie where Dt_otprav='2013-12-24')) Но в задании количество Свободных мест... т.е. надо вычесть кол-во уже купленных билетов? Как это осуществить? Подсчитать строки (с условием, где будет уточнено то, по какому маршруту едет) в таблице, где имеются Id покупателей этих самых билетов, а потом вычесть их из общего количества мест в автобусе? В *3) надо видимо как-то связать в двух таблицах коды пассажира, выбрать фамилию в "Пассажирах", а в "Билетах" - Пункт отправления и Дату отправления? Не до конца еще изучен синтаксис... Вышло пока только удалить билет на дату до конкретного города: Delete from Bilety Where P_pribyt='Тихвин' and Dt_otprav='2013-12-23' Но что если еще кто-то едет туда же? Тогда все их билеты удалятся... Как связать этот запрос с таблицей "Пассажиры"? А *2) совсем не представляю, как делать... Вроде выглядят запросы достаточно просто, а как начнешь с нуля ковыряться, так прям то кочка, то пенек, всё время спотыкаюсь. Помогите, пожалуйста, подскажите...! Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
Агрох |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 176 Регистрация: 6.4.2013 Где: Москва Репутация: нет Всего: 6 |
По 1. Да, вам надо подсчитать количество пассажиров на маршруте в указанное время и вычесть его из количества мест. Функция COUNT.
По 3. У вас же билет имеет полный набор данных для однозначной идентификации. - номер места, дата и маршрут. По ним и удаляйте. --------------------
Putin here, Putin there, Putin almost everywhere! |
|||
|
||||
registerconfirm |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.7.2012 Где: Липка Репутация: нет Всего: нет |
Примерно должна получиться такая конструкция: select sum(t1.s1)-sum(t1.s2), t1.n from ( select sum(количество мест) as s1, 0 as s2, номер автобуса as n .... union select 0, count(количество билетов), номер автобуса ... order by n ) t1 group by t1.n Вот не помню можно использовать order by здесь или нет. PS: схема с названиями на русском языке - это АдЪ ![]() Это сообщение отредактировал(а) registerconfirm - 24.12.2013, 21:29 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |