Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
1

Объединение двух связанных запросов

26.11.2016, 23:18. Показов 1989. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Помогите пожалуйста с SQL запросом для выборки двух взаимосвязанных запросов.

То есть в БД существуют 3 взаимосвязанных таблиц:

Таблица "Заказ" - хранятся заказы с датами предполагаемых заказов и номера на которые поступили заказы
Таблица "Номер" - список номеров гостиницы
Таблица "Класс обслуживания" - дополнительный описательный список класса номера (стоимость и т.д. и т.п.)
Объединение двух связанных запросов


Так вот, мне нужно получить список номеров, которые свободны на заданный промежуток времени, в список должны включаться:
  • Номер.[Гостинничный номер]
  • [Класс обслуживания].Описание
  • [Номер].[Вид из окна]
  • [Класс обслуживания].[Стоимость номера]

На данный момент я сделал получение списка свободных номеров без описания (просто номера):
SQL
1
2
3
4
5
6
SELECT Номер.[Гостинничный номер]
FROM Номер
WHERE (((Номер.[Гостинничный номер]) NOT IN (
              SELECT Заказ.[Гостинничный номер]
              FROM Заказ
              WHERE (((Заказ.[Дата прибытия]) BETWEEN #11/1/2016# AND #11/3/2016#) AND ((Заказ.[Дата выезда]) BETWEEN #11/1/2016# AND #11/3/2016#) ) ) ) )
Но как бы я ни старался, я не могу выбить описание из вспомогательной таблицы "Класс обслуживания".

Подскажите пожалуйста как вывести данные описания.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2016, 23:18
Ответы с готовыми решениями:

Объединение двух запросов
Добрый день. подскажите как правильно составить запрос и как можно поправить мой запрос. есть...

Создание запроса на объединение двух других запросов
Добрый день. Подскажите решение в следующей ситуации. Есть два сложных запроса на выборку...

Программное создание связанных таблиц и экспорт запросов и форм
Доброго времени суток уважаемые форумчане! Что-то надоело вручную постоянно подвязывать таблицы из...

Объединение нескольких связанных импортированных таблиц в 1 запрос
Требуется Ваша помощь, друзья!) У меня есть 15 таблиц по 15ти отделам, с одинаковыми шапками....

7
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
26.11.2016, 23:37  [ТС] 2
Ох как я заработался уже...

Извините за странную тему само решённую.
Решил как и обычно через INNER JOIN (А заработавшись пытался достать тоже через вложенный запрос).

Не по теме:

Бывает такое, строчишь вопрос в тему, уже на грани нажатия кнопки Создать, но потом погуляешь по комнате и решение само вспоминается.
Надо чаще вставать из-за компьютера.

0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
26.11.2016, 23:40 3
Лучший ответ Сообщение было отмечено PandoraBox как решение

Решение

Надо связать таблицы Номер и [Класс обслуживания]. В SQL-виде во From
SQL
1
2
FROM Номер INNER JOIN [Класс обслуживания] ON 
Номер.[Вид номера]=[Класс обслуживания].[Вид номера]
А в Select добавьте поле [Класс обслуживания].Описание

И кстати, временной период описан неверно. Номер может быть занят раньше даты в условии или освобожден после нее. Условие занятого в период номера подразумевает, что дата въезда меньше или равна наибольшей дате периода, а дата выезда больше или равна наименьшей дате периода
SQL
1
WHERE Заказ.[Дата прибытия] <= #11/3/2016# AND Заказ.[Дата выезда] >= #11/1/2016#
0
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
27.11.2016, 13:10  [ТС] 4
Цитата Сообщение от mobile Посмотреть сообщение
временной период описан неверно
Верно говорите, что в условии допущена ошибка, пригляделся и правда. Но ошибка не во временном интервале, а логическая, вместо захвата (AND) двумя BETWEEN мне надо было промежутки между датой выезда и приезда складывать (OR)
SQL
1
2
WHERE ((Заказ.[Дата прибытия] BETWEEN #11/1/2016# AND #11/3/2016#) OR
       (Заказ.[Дата выезда] BETWEEN #11/1/2016# AND #11/3/2016#))
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
27.11.2016, 13:51 5
Нет, ошибаетесь. Пример: дата въезда - #10/31/2016#, выезда - #11/4/2016#. По Вашей формуле не попадает, а номер занят.
0
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
28.11.2016, 21:10  [ТС] 6
Цитата Сообщение от mobile Посмотреть сообщение
По Вашей формуле не попадает, а номер занят
Однако... Верно. Воспроизвёл ситуацию:

НомерДата прибытияДата выезда
501.11.201603.11.2016
631.10.201604.11.2016

На деле, c датой:
Желаемое прибытие - 02.11.2016
Желаемый съезд - 28.11.2016

Получилось так, что ваш код:
SQL
1
WHERE Заказ.[Дата прибытия] <= #11/2/2016# AND Заказ.[Дата выезда] >= #11/28/2016#
Не отсеивает эти два номера, что увы не может быть.

Но зато он учитывает ситуацию, когда желаемые дата и съезд - 11.1.2016 и 11.3.2016 соответственно.

Возможно я обошёлся очередным топором, но я объединил наши условия, и они с изначальными проверками вроде как проходят:
SQL
1
2
3
WHERE (Заказ.[Дата прибытия] <= #Дата прибытия# AND Заказ.[Дата выезда] >= #Дата съезда#) OR
   ((Заказ.[Дата прибытия] BETWEEN #Дата прибытия# AND #Дата съезда#)
   OR (Заказ.[Дата выезда] BETWEEN #Дата прибытия# AND #Дата съезда#))
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
28.11.2016, 21:50 7
Вы не дали свою базу. К сожалению. Поэтому привожу самодельную. 2 таблицы - Заказы, Номер с минимальным количеством полей. Только нужные для решения. Смотрим данные из т.Заказ. Там воспроизведены Ваши даты. Выполняем ЗапросДаты и видим, что Ваши возражения неверны. Запрос только с моим условием отсеивает занятые номера
Вложения
Тип файла: rar ВъездВыезд.rar (12.2 Кб, 6 просмотров)
1
2 / 2 / 1
Регистрация: 15.08.2014
Сообщений: 30
29.11.2016, 09:19  [ТС] 8
Ахахах.

Да, вы были правы!

Моя грубейшая ошибка - невнимательность. При тестировании вашего запроса я попросту вводил с клавиатуры его, в следствии чего мною была допущена ошибка - изменил местами даты которые вы приводите в своём запросе.
Из-за невнимательности пришлось делать костыли.

Спасибо большое!
0
29.11.2016, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2016, 09:19
Помогаю со студенческими работами здесь

Объединение запросов
Доброго времени суток! Помогите связать запросы. В первом считается сумма отгрузок по дням...

Объединение перекрестных запросов
У меня есть два запроса, один рассчитывает расход обоев, другой - расход краски. У обоих запросов в...

Объединение запросов в один, использование условия
в запросе есть поле дата1, дата2, дата3 как сделать, чтобы при выполнении условия - ...

Объединение запросов или создание таблицы
Столкнулся с такой задачей: дана таблица excel, в которой построена сводная таблица состоит из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru