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 ... 这将返回任何具有BookingIdDepartDate想要的 a 的行。

于 2013-03-20T15:44:16.650 回答