Таблица Название: MRM_BOOKING_DETAILS
Образец данных:SQLite подзапрос не работает
Booking_id USER_ID ROOM_ID CHECKIN CHECKOUT
1 hary 1 2012-04-16 09:00:00 2012-04-16 09:30:00
2 jenny 2 2012-04-17 13:00:00 2012-04-17 13:30:00
3 steve 1 2012-04-16 15:00:00 2012-04-16 15:30:00
и так далее ...
Booking_id
является первичным ключом. Room_Id
- это Иностранный ключ w.r.t. Room_Details_Table
, имеющий Room_Id
как ПК.
Моя цель - получить список доступных записей в определенный день, конкретное время, введенное пользователем. Для делать это я придумал этот запрос:
SELECT ROOMNO,BUILDINGNO
FROM MRM_ROOM_DETAILS
WHERE ROOMID IN (SELECT distinct roomid
FROM MRM_BOOKING_DETAILS
WHERE (CHECKIN NOT BETWEEN '2012-04-13 09:50:00' AND '2012-04-13 10:20:00')
and (CHECKOUT NOT BETWEEN '2012-04-13 09:50:00' AND '2012-04-13 10:20:00'))
AND CAPACITY > 15 AND PROJECTIONSTATUS = 'NO';
Capacity
и ProjectionStatus
столбцы в деталях номер таблицы, игнорируйте эту часть как сейчас.
CHECKIN
и CHECKOUT
- это значения, предоставленные пользователем на экране поиска.
Но, к сожалению, подзапрос неверен, поэтому я не получаю желаемых результатов.
SELECT distinct roomid
FROM MRM_BOOKING_DETAILS
WHERE (CHECKIN NOT BETWEEN '2012-04-13 09:50:00' AND '2012-04-13 10:20:00') and
(CHECKOUT NOT BETWEEN '2012-04-13 09:50:00' AND '2012-04-13 10:20:00');
Вот почему я говорю, что подзапрос неверен. Предположим, что значения, предоставленные пользователем, являются:
CHECKIN : 2012-04-16 09:00:00 and CHECKOUT: 2012-04-16 09:30:00
С учетом указанных выше данных в таблице, оба ROOM_ID
1 и 2 будут возвращены. Для первой строки она не удастся, но она будет успешной для второй и третьей строк, в результате она вернет как 1, так и 2, что неверно. Правильный результат должен быть только 2.
Пожалуйста, помогите мне получить правильный запрос.