Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询以输出酒店中的当前客人_Sql_Oracle_Join_Union - Fatal编程技术网

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

考虑上述关系。我试图列出目前住在酒店的所有客人和家属,这意味着他们都在房间里

以下是我的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')));
尽管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')
);