Объединение союза и условий 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 что ты хочешь.

Другие вопросы по тегам