Объединение союза и условий WHERE в SQL-выражении
Схема:
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, где появляется ошибка отсутствующего выражения. Как я могу это исправить? Я тоже хочу использовать союз.
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
что ты хочешь.