模式:
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子句中遇到了缺少表达式错误的问题。我怎样才能解决这个问题 ?我也想使用工会。
答案 0 :(得分: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
的{{1}}的所有行。