-1

3 つのテーブルがあります (これは最適な SQL データベース設計ではないことに注意してください)

Room: TypeName, RoomNumber
RoomType: TypeName, ...
Reservation: StartDate, EndDate, TypeName, RoomNumber

私の入力パラメータはstartdateenddateです。利用可能な個別のものを知りたいroomtypesです。私の理解から、解決策は次のようになります。AvailableRoomTypes = AllRoomTypes - UnavailableRoomTypes

明らかに、次の方法AllRoomTypesで見つけることができます: SELECT DISTINCT(TypeName) FROM Room; and I know how to get available rooms, but not available roomtypes. また、あるセットから別のセットを差し引く方法も知りません。すべてrooms+roomtypesのセットと使用不可の別のセットを取得できますrooms+roomtypesが、どのように結合すればよいのA-Bでしょうか? もしかして何かのNOT_CONTAINS機能?

出力パラメータを にしたいと思いますSELECT * FROM RoomType (for the appropriate roomtypes)

4

4 に答える 4

1
SELECT t.*
  FROM ROOMTYPE t
 WHERE NOT EXISTS(SELECT NULL 
                    FROM RESERVATION r
                    JOIN ROOM ro ON ro.roomnumber = r.roomnumber
                   WHERE ro.typename = t.typename
                     AND r.startdate BETWEEN ?IN_START_DATE AND ?IN_END_DATE
                     AND r.enddate BETWEEN ?IN_START_DATE AND ?IN_END_DATE)
于 2009-11-29T07:33:40.887 に答える
0

未使用のルームタイプ

select RT.* 
from RoomType RT
where RT.TypeName not in (
   Select RM.TypeName 
   from Room RM
) 

AB 選択を行う 1 つの方法は、"not in (select ..)" 演算子であり、not exists (select ..) は別の方法であり、さらに多くの方法があると確信しています。

于 2009-11-29T07:34:46.417 に答える
0

Room: TypeName, RoomNumber RoomType: TypeName, ... 予約: StartDate, EndDate, TypeName, RoomNumber

これがあなたの答えかもしれません... 部屋 r から rt.typename を
選択して ください 。終了する





于 2009-11-29T08:06:42.243 に答える
0

SUM(reservation.roomtype)UNIONを使用したくない -SUM(service.servicetype)異なる属性です。しかし、そうした場合は、NULL を使用してクエリをオフセットし、列が重複しないようにする必要があります。いいえ:

SELECT SUM(reservation.roomtype), NULL ...
UNION ALL
SELECT NULL, SUM(service.servicetype) ...

あなたが提供したロジックに基づいて、これは私が思いついたクエリです:

SELECT SUM(r.roomtype),
       SUM(s.servicetype)
  FROM RESERVATION r
  JOIN BILL b ON b.reservationid = r.reservationid
             AND b.paid = 1
  JOIN SERVICE s ON s.serviceid = b.serviceid

それは単一の行を返します。より意味のある結果セットを返すには、クエリ (または情報に応じてクエリ) が何にグループ化されているかを知る必要があります。RESERVATIONとテーブルの詳細は、SERVICE私たちがあなたを助けるのに役立ちます.

于 2009-12-03T04:32:47.353 に答える