SQL查询以输出酒店中的当前客人
考虑上述关系。我试图列出目前住在酒店的所有客人和家属,这意味着他们都在房间里 以下是我的SQL查询:SQL查询以输出酒店中的当前客人,sql,oracle,join,union,Sql,Oracle,Join,Union,考虑上述关系。我试图列出目前住在酒店的所有客人和家属,这意味着他们都在房间里 以下是我的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.ARRIVED
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')));
尽管guest 5445和3005通过其相关预订满足where条件,但未显示任何输出。我在等5445和3005的名字
如果我删除以下行:
b.ARRIVEDATE < TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY')
b.ARRIVEDATE
将显示姓名列表。但是逻辑是错误的,因为如果没有arrivedate的考虑,你将无法发现现在的客人
我的问题是,上面这一行是否添加错误?为什么在满足条件时不显示这些客人。他们毕竟是现在的客人。我能做什么 我认为问题在于你比较的是字符串而不是日期
'19-MAR-2013' < '21-MAR-2013' => TRUE
'10-JUN-2013' > '21-MAR-2013' => FALSE (as '10...' < '21...')
我认为问题在于你比较的是字符串而不是日期
'19-MAR-2013' < '21-MAR-2013' => TRUE
'10-JUN-2013' > '21-MAR-2013' => FALSE (as '10...' < '21...')
另请参见,以了解有关此的更多信息topic@JohnBevan嗨,John,我的列是CREATETABLE语句中定义的日期。在询问中,我看到了其他关于人们如何使用它们的讨论。但是误解了这个概念。相对于_CHAR,我可以用什么来代替它们?或者你的答案高于唯一的解决方案Hey@MuminAli;如果您的列已经是日期,只需将它们与当前的_日期进行比较即可,因为当前的_日期已经返回了一个日期,所以无需对其进行转换。i、 e.
其中显示的是b.ARRIVEDATE和b.DEPARTDATE之间的当前日期
未选择任何行。问题中的初始问题。修复:D正在工作,需要刷新更新的create tables.ps。另请参见以了解有关此的更多信息topic@JohnBevan嗨,John,我的列是CREATETABLE语句中定义的日期。在询问中,我看到了其他关于人们如何使用它们的讨论。但是误解了这个概念。相对于_CHAR,我可以用什么来代替它们?或者你的答案高于唯一的解决方案Hey@MuminAli;如果您的列已经是日期,只需将它们与当前的_日期进行比较即可,因为当前的_日期已经返回了一个日期,所以无需对其进行转换。i、 e.其中显示的是b.ARRIVEDATE和b.DEPARTDATE之间的当前日期
未选择任何行。问题中的初始问题。修复:D工作,需要刷新更新的创建表。
SELECT g.FORENAME, g.SURNAME
FROM GUEST g
INNER JOIN BOOKING b
ON g.GUESTID = b.GUESTID
WHERE CURRENT_DATE BETWEEN TO_DATE(b.ARRIVEDATE, 'DD-MON-YYYY') AND TO_DATE(b.DEPARTDATE, '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 CURRENT_DATE BETWEEN TO_DATE(b.ARRIVEDATE, 'DD-MON-YYYY') AND TO_DATE(b.DEPARTDATE, 'DD-MON-YYYY')
);