考虑上述关系。我正在尝试列出当前住在酒店的所有客人和家属,这意味着他们在房间里。
这是我的 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')));
查询执行但不显示任何行选择,当它应该时。
这是我的BOOKING插入语句。
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')
将显示名称列表。但是这个逻辑是错误的,因为如果不考虑,您将无法检测到现在的客人。
我对你的问题是上面的行被错误地添加了吗?为什么在满足条件时不显示那些客人。他们毕竟是现在的客人。我能做些什么?