0
考慮上述關係。我試圖列出當前住在酒店的所有客人和家屬,這意味着他們出現在房間裏。SQL查詢輸出酒店中的當前客人
這裏是我的SQL查詢:
SELECT g.FORENAME, g.SURNAME
FROM GUEST g
INNER JOIN BOOKING b
ON g.GUESTID = b.GUESTID
WHERE (b.DEPARTDATE > TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY') AND b.ARRIVEDATE < TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY'))
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 > TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY') AND b.ARRIVEDATE < TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY')));
查詢執行,但顯示沒有行選擇,當它應該是。
這裏是我的插入語句預訂。
INSERT INTO BOOKING VALUES (2002, 5445, '19-MAR-2013', '10-JUN-2013', 250.00);
INSERT INTO BOOKING VALUES (2004, 3005, '19-MAR-2013', '21-MAR-2013', 250.00);
儘管客人5445和3005與相關預訂滿足where條件,但沒有輸出顯示。林預計5445和3005
的名字,如果我刪除以下行:
b.ARRIVEDATE < TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY')
將顯示名稱的列表。但邏輯錯誤,因爲如果沒有經過考慮,你無法檢測到目前的客人。
我的問題給你是上面的行不正確的添加?爲什麼他們在滿足條件時不顯示這些客人。畢竟他們是現在的客人。我能做什麼?
PS又見http://stackoverflow.com/questions/10178292/comparison-date-in-oracle-sql關於此主題的更多信息 – JohnLBevan 2013-03-21 01:41:02
@JohnBevan嗨John,我的列是在CREATE表語句中定義的日期在查詢中,我做了to_char查看其他討論人們如何使用它們。但誤解了這個概念。與TO_CHAR相反,我可以用什麼替換它們?或者您的答案超出了唯一的解決方案 – Hoody 2013-03-21 01:44:30
Hey @MuminAli;如果您的列已經是日期,只需將它們與CURRENT_DATE進行比較 - 即已返回日期,因此無需將其轉換。即'BURRART_DATE和b.DEPARTDATE'之間的當前日期' – JohnLBevan 2013-03-21 01:47:07