0

スキーマ:

   BookingDependent ( BookinngID(pk,fk) , DependentID(pk,fk))
   Booking (BookingID(pk),GuestID(fk), ArriveDate,DepartDate, Totalprice) 

試行されたSQLステートメント:

SELECT g.FORENAME, g.SURNAME       
FROM GUEST g
INNER JOIN BOOKING b ON g.GUESTID = b.GUESTID
UNION
SELECT d.FORENAME, d.SURNAME
FROM DEPENDANT d
INNER JOIN BOOKINGDEPENDANT bd ON bd.DEPENDANTID = d.DEPENDANTID
WHERE (SELECT * FROM BOOKING b
WHERE b.DEPARTDATE > '20-MAR-2013');

こんにちはみんな、データベースからすべての過去のゲストと扶養家族を表示するのではなく、現在ホテルに滞在しているすべてのゲストと扶養家族を一覧表示するSQLクエリを作成しようとしています。式の欠落エラーが発生するWHERE句からの問題。どうすればこれを修正できますか?私もユニオンを使いたいです。

4

1 に答える 1

1

WHERE句フィルターをクエリの残りの部分に関連付ける列がありません。

次のクエリを使用したいようです。

SELECT g.FORENAME, g.SURNAME       
FROM GUEST g
INNER JOIN BOOKING b 
   ON g.GUESTID = b.GUESTID
WHERE b.DEPARTDATE > '20-MAR-2013'
UNION
SELECT d.FORENAME, d.SURNAME
FROM DEPENDANT d
INNER JOIN BOOKINGDEPENDANT bd 
   ON bd.DEPENDANTID = d.DEPENDANTID
WHERE bd.BookingID in (SELECT b.bookingid   
                       FROM BOOKING b
                       WHERE b.DEPARTDATE > '20-MAR-2013');

WHERE句をに変更したことに気付くでしょうWHERE bd.BookingID in ..BookingIdこれにより、必要なを含むすべての行が返さDepartDateれます。

于 2013-03-20T15:44:16.650 に答える