2012-04-28 18 views
0

2012-05-1と2012-11-01の間に予約されている客室を予約データベースから選択するにはどうしますか?SQL照会

+1

あなたのアイデアは何ですか?あなたの試みを見せてください。 –

答えて

1

SELECT * from room 
WHERE (roomNo, hotelNo) not in 
(select roomNo, hotelNo 
    from booking 
    where datefrom between '2012-05-01' and '2012-11-01' 
    or dateto between '2012-05-01' and '2012-11-01' 
) 
3
select r.* from rooms r 
left outer join bookings b on b.roomno = r.roomno 
where b.dateto not between '2012-05-01' and '2012-11-01' 
and b.datefrom not between '2012-05-01' and '2012-11-01' 
or b.roomno is null 

SQLFiddle Example

+0

予約期間が終了日の開始の途中であればどうなりますか?あなたは、開始日または終了日の途中で部屋を予約している人はいません。 – aleroot

+0

@aleroot:それはすべきです。 SQLFiddleの例を参照してください。 –

+0

@juergendこれまでの予約のない客室ではご利用いただけません。 –

2

次これは、2つの特定の日付の間に予約されていないすべての客室を含める必要があります試してみてください。

SELECT * FROM Room r 
JOIN Booking b ON b.hotelNo = r.hotelNo AND r.roomNo = b.roomNo 
WHERE NOT ('2012-05-01' BETWEEN (b.dateFrom AND b.dateTo) 
OR '2012-11-01' BETWEEN (b.dateFrom AND b.dateTo)) 
+0

これまでの予約のない部屋では使用できない場合があります –