1

こんにちは、SQL ステートメントを使用するのは初めてで、SQL ステートメントが適切な結果を返しません。Room (部屋の詳細を含む) と Booking (予約された部屋の ID を含む) の 2 つのテーブルがあります。到着日と出発日の範囲外で、RoomType = single の予約の RoomID を取得する必要があります。最後に Room テーブルから ID を検索して詳細を表示します。

psmt = con.prepareStatement("SELECT RmID,RmName,RmType,RmDescription,RmRate,RmMaxPerson FROM Room WHERE RmID NOT IN (SELECT RmID FROM Booking WHERE ((BookArrivalDate >= ? AND BookArrivalDate < ?))) AND RmType = ?");
psmt.setDate(1, sqlDateAStart);
psmt.setDate(2, sqlDateAEnd);
psmt.setString(3, RoomType);
rs = psmt.executeQuery()

ありがとうございました

4

3 に答える 3

0

出発日を考慮していないエラーがあります。 これを試してください::

SELECT 
RmID,
RmName,
RmType,
RmDescription,
RmRate,RmMaxPerson 
FROM 
Room r
INNER JOIN Booking b on (r.RmID =b.RmID ) 
WHERE BookArrivalDate < ? AND BookDepartureDate > ? AND RmType = ?
于 2013-10-21T12:11:24.443 に答える
0

以下のコードを変更して両方のテーブルから値を選択する必要があり、日付と時刻の両方を必要とする予約システムを扱っているため、 BookArrivalDate と BookDepartureDateの両方のデータ型としてTimestampを使用することをお勧めします。指定されたFromDate と ToDateがいずれかの予約日の間に存在するかどうかを確認し、存在する場合は結果を返す SQL クエリを投稿しました。

SELECT RmID,RmName,RmType,RmDescription,RmRate,RmMaxPerson
FROM Room,Booking
WHERE 
(RmType ='single') 
AND 
((
('fromtime'>=arrivaltime)
AND 
('totime'<=departuretime))
OR 
(
('fromtime'<=arrivaltime)
 AND 
 ('totime'>=departuretime))
OR 
(
('fromtime'<=arrivaltime) 
AND 
('totime'>=arrivaltime)) 
OR 
(
('totime'>=arrivaltime)
 AND
  ('totime'<=departuretime)) 
OR 
(
('totime'>=departuretime)
 AND
  ('fromtime'<=departuretime))
OR 
(
('fromtime'>=arrivaltime)
 AND
  ('fromtime'<=departuretime)
)) 

ここで、arrivaltimeはデータベースに存在する BookArrivalDate であり、departuretime はデータベースに存在するBookDepartureDateですfromtime と totimeは、準備されたステートメント/日付範囲で指定する値です。

于 2013-10-21T12:46:02.900 に答える