0
SELECT HOTEL.ROOM
FROM HOTEL
  LEFT OUTER JOIN BOOKED
 ON BOOKED.ROOM = HOTEL.ROOM

 WHERE
    TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN BOOKED.ARRIVALDATE 
 AND BOOKED.ARRIVALDATE + &NIGHTS

助けが必要です。予約済みの部屋を検索し、利用可能な部屋を返す必要があります。基本的に、ユーザーはクエリに日付と滞在する泊数を入力します。これは BOOKED テーブルで検索されます。日付が等しい場合は、部屋が予約されていることを意味し、HOTEL.ROOM テーブルからその部屋を選択するべきではありません。編集: RIGHT OUTER JOIN を LEFT OUTER JOIN に変更しました。間違ったテーブルからデータを選択していることに気付きました

4

1 に答える 1

0

日付範囲内の予約:

SELECT *
FROM   BOOKED
WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS

HOTELこのリストにある部屋、つまり予約済みの部屋を見つけるために拡張します。

SELECT ROOM
FROM   HOTEL
WHERE  EXISTS (
         SELECT *
         FROM   BOOKED
         WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS
         AND    ROOM = HOTEL.ROOM
       )

そして、このリストにないもの、つまり予約されていないもの:

SELECT ROOM
FROM   HOTEL
WHERE  NOT EXISTS (
         SELECT *
         FROM   BOOKED
         WHERE  TO_DATE('&STARTDATE','DD-MM-YY') BETWEEN ARRIVALDATE AND ARRIVALDATE + &NIGHTS
         AND    ROOM = HOTEL.ROOM
       )
于 2013-11-05T09:47:50.443 に答える