テーブル名: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
主キーです。PKとして持つRoom_Id
外部キーです。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の両方が返されます。最初の行では失敗しますが、2番目と3番目の行では成功します。その結果、1と2の両方が返されますが、これは正しくありません。正しい結果は2つだけです。
正しいクエリを取得するのを手伝ってください。