Я использую идею Microsoft для хранения ресурсов и информации о бронировании.Короче говоря, ресурсы, такие как номер в отеле, не имеют записей о дате, а записи о бронировании имеют BeginDate и EndDate.
Я пытаюсь получить информацию о доступности комнаты, используя запросы MS, но что-то подсказывает мне, что запросы MS оставляют желать лучшего.Вот статья MS, на которую я ссылаюсь: http://support.microsoft.com/kb/245074
Как я могу получить доступные комнаты для определенного диапазона дат?Вот мой запрос, который возвращает простой список заказов:
SELECT r.RoomID, b.BeginDate, b.EndDate
FROM tblRoom as r INNER JOIN tblBooking b ON r.RoomID = b.AssignedRoomID;
Но я все еще озадачен тем, как я могу получить список доступных номеров для данного диапазона дат?
IЯ использую Microsoft Access, но я бы хотел, чтобы мои запросы к СУБД были максимально независимыми.Хотя на самом деле это не мой вопрос, если вы считаете, что модель данных, которую я использую, неверна, скажите, пожалуйста, так как я готов рассмотреть лучший способ хранения моих данных.
Edit1:
Я не упомянул, что мне не нравятся запросы MS по двум причинам.Прежде всего, я действительно запутался в отношении трех различных операторов OR в предложении WHERE.Это действительно необходимо?Во-вторых, мне не нравится идея сохранения запроса и использования его в качестве таблицы, хотя я готов сделать это, если он выполнит свою работу, что, как я полагаю, в этом случае делает.
Edit2:
Это решение, которое я нашел, используя превосходный ответ, приведенный здесь.Это MS Access SQL диалект (простите):
SELECT * FROM tblRoom AS r
WHERE RoomID NOT IN
(SELECT AssignedRoomID as RoomID From tblBooking
WHERE assignedroomid IS NOT NULL AND assignedroomid = r.roomid AND
(BeginDate < @BookingInquiryEndDate AND EndDate > @BookingInquiryBeginDate)
)