1

個々のゲストの扶養家族をリストしようとしています。ホテルを予約する際、ゲストは友人や子供を同伴することができます(扶養家族)。ただし、部屋を予約する場合、各部屋に配置できるのは 3 人までです。したがって、ゲストが 4 人を連れてきた場合、2 人の扶養家族は部屋 102 に滞在し、他の 3 人は部屋 103 に滞在します。しかし、彼らは同じ予約の下にあり、予約 ID = 2002 とします。

SQL oracle クエリを実行して、特定の予約のすべての扶養家族を表示しようとしています。これが私が試みたもので、うまくいきます:

SELECT b.BOOKINGID,
       b.GUESTID,
       d.DEPENDANTID,
       d.FORENAME AS firstname,
       d.SURNAME AS lastname,
       br.FLOORNO,
       br.ROOMNO
FROM  BOOKING b
      LEFT JOIN BOOKINGDEPENDANT bd
      ON b.BOOKINGID = bd.BOOKINGID
      LEFT JOIN DEPENDANT d
      ON d.DEPENDANTID = bd.DEPENDANTID
      LEFT JOIN BOOKINGROOM br
      ON b.BOOKINGID = br.BOOKINGID
WHERE b.BOOKINGID = &BOOKINGID;  

上記のクエリで直面している問題は、すべての扶養家族を一覧表示できることですが、予約が複数の部屋に関連付けられている場合、それらを複数回一覧表示することです。

たとえば、予約 2002 は部屋 102 と 103 を使用します。したがって、103 に滞在する人を含むすべての扶養家族は 103 に関連付けられます。103 についても同様です。

4

2 に答える 2

1

扶養家族と部屋の間のマッピングが必要です。あなたが持っているのは、予約から扶養家族へのマッピングと、予約から部屋への別のマッピングです。

に部屋IDがあると仮定しますBookingDependant。その場合、from句は次のようになります。

FROM  BOOKING b
      LEFT JOIN BOOKINGDEPENDANT bd
      ON b.BOOKINGID = bd.BOOKINGID
      LEFT JOIN DEPENDANT d
      ON d.DEPENDANTID = bd.DEPENDANTID
      LEFT JOIN BOOKINGROOM br
      ON bd.BookingId = br.BOOKINGID and
         bd.BookingRoomId = br.BookingRoomId

この構成は、予約を行う1人の人がBookingDependentテーブルにいることを前提としています。

各扶養家族の部屋IDを保存しない場合は、クエリから部屋を削除します。

SELECT b.BOOKINGID, b.GUESTID, d.DEPENDANTID,
       d.FORENAME AS firstname, d.SURNAME AS lastname
FROM  BOOKING b
      LEFT JOIN BOOKINGDEPENDANT bd
      ON b.BOOKINGID = bd.BOOKINGID
      LEFT JOIN DEPENDANT d
      ON d.DEPENDANTID = bd.DEPENDANTID
WHERE b.BOOKINGID = &BOOKINGID; 

部屋から扶養家族へのマッピングがないため、希望する結果を生成する正しい方法はありません。課題を作成したい場合は、テーブルのレイアウトと課題を作成するためのルールを提供して、おそらく別の質問をする必要があります。

于 2013-03-19T20:43:59.257 に答える
0

BOOKINGROOM テーブルに関連付けられた DEPENDENT テーブルを表示する方法が必要です。BOOKINGDEPENDENT.ROOMID = BOOKINGROOM.ID のようなものです。次に、次のように参加します。

SELECT b.BOOKINGID,
       b.GUESTID,
       d.DEPENDANTID,
       d.FORENAME AS firstname,
       d.SURNAME AS lastname,
       br.FLOORNO,
       br.ROOMNO
FROM  BOOKING b
      LEFT JOIN BOOKINGDEPENDANT bd
      ON b.BOOKINGID = bd.BOOKINGID
      LEFT JOIN DEPENDANT d
      ON d.DEPENDANTID = bd.DEPENDANTID
      LEFT JOIN BOOKINGROOM br 
      ON br.ID = bd.ROOMID and ON br.BOOKINGID = b.BOOKINGID
WHERE b.BOOKINGID = &BOOKINGID; 
于 2013-03-19T20:44:49.747 に答える