2013-03-20 29 views
0

模式:結合工會和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 ..。這將返回所有具有BookingIdDepartDate的行。

+0

謝謝!很好的解釋:) – user1948682 2013-03-20 15:57:37

+0

@ user1948682不客氣! – Taryn 2013-03-20 15:58:05