0

タイトルが示すように、ユーザーがチェックインとチェックアウトの日付を指定すると、利用可能なすべてのホテルの部屋を取得しようとしています。私はある程度の進歩を遂げましたが、このプロセスの背後にあるロジックを理解するのに苦労しています.

ここに私が持っているものがあります:

SELECT r.FLOOR, r.ROOM
FROM BOOKING b, ROOMS r
WHERE TO_DATE('2015-03-28', 'YYYY-MM-DD')
BETWEEN TO_DATE(b.CHECKIN, 'YY-MM-DD') AND TO_DATE(b.CHECKOUT, 'YY-MM-DD')
AND r.ROOMID = b.ROOMID;

これは、指定された日付に取得されたすべての部屋を返すだけです。(2015-03-28)

このコードを変更して、2 つの日付を取得し、チェックアウトをチェックインしながら、取得した部屋の代わりに利用可能な部屋を提供するにはどうすればよいですか。

どんな助けでも大歓迎です!

4

3 に答える 3

0

こちらの方が近いかもしれません。必要に応じてパラメーター (@ でマーク) を置き換えます。

SELECT r.FLOOR, r.ROOM
FROM ROOMS r
WHERE r.ROOMID NOT IN (
    -- exclude rooms where checkin or checkout overlaps with the desired dates
    SELECT r.ROOMID
    FROM BOOKING b
    WHERE (
            b.CHECKIN  BETWEEN TO_DATE(@CHECKIN, 'YY-MM-DD') AND TO_DATE(@CHECKOUT, 'YY-MM-DD')
        OR  b.CHECKOUT BETWEEN TO_DATE(@CHECKIN, 'YY-MM-DD') AND TO_DATE(@CHECKOUT, 'YY-MM-DD')
    )
于 2015-03-31T20:01:00.630 に答える