0

私のデータベースには、部屋の情報とプロパティを含むroomsというテーブルと、Room Reserved、FromDate、およびToDateを含む予約テーブルという別のテーブルがあります。

私がやりたいことは、ユーザーが予約したい部屋のサイズを選択し、部屋を予約する日付を選択することです。次に、部屋予約テーブルに応じて利用可能な部屋を提供します。

ここで私がしたこと:

SELECT  * FROM Rooms,Reservations WHERE 
Rooms.R_Size = 'roomSize' AND ('4/19/2013' NOT 
BETWEEN Reservation.FromDate AND Reservation.ToDate  AND '4/19/2013'
NOT BETWEEN Reservation.FromDate AND Reservation.ToDate) 

問題は、重複した部屋を私に返すことであり、特定の予約の予約日の間であっても、別の予約の予約日の間ではない場合でも、それは私に返されます。

私が望むのは、部屋が同じ日に予約されているか、特定の日付の間に予約されているかどうかを確認することです。

ありがとう..そして私の下手な英語でごめんなさい

4

2 に答える 2

1

クエリには 2 つの問題があります。1 つは、日付テストを満たす予約ごとに正しいサイズの部屋が 1 回返されるように、部屋と予約の間の結合に条件がないことです。別の問題は、新しい予約の日付間隔内に完全にある既存の予約を検出できないため、日付テストが間違っていることです。

このようなクエリは、あなたが望む結果を与えるはずです:

SELECT * FROM Rooms
LEFT JOIN Reservations 
ON Reservations.R_Number = Rooms.Number
AND Reservations.ToDate > '4/19/2013'
AND Reservations.FromDate < '4/20/2013'
WHERE Rooms.R_Size = 'roomSize' 
AND Reservations.R_Number IS NULL 

部屋をその部屋の予約に結合し、作成中の新しい予約と競合する予約がない部屋を選択することによって機能します。片端は問題ありません)。

于 2013-04-17T22:49:32.937 に答える