表名: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.作爲PK的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.
請幫我找到正確的查詢。