表名:MRM_BOOKING_DETAILS
样本数据:
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
是作为PKRoom_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。
请帮助我获得正确的查询。