【发布时间】:2012-04-29 00:32:20
【问题描述】:
表名: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 是外键 w.r.t. Room_Details_Table 有Room_Id 作为PK。
我的目标是获取用户输入的特定日期、特定时间可用的记录列表。为此,我提出了以下查询:
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。
请帮助我得到正确的查询。
【问题讨论】:
标签: android sql select sqlite scheduling