Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
正在尝试查询酒店数据库,以返回SQLZOO上特定日期未占用房间的id_Sql - Fatal编程技术网

正在尝试查询酒店数据库,以返回SQLZOO上特定日期未占用房间的id

正在尝试查询酒店数据库,以返回SQLZOO上特定日期未占用房间的id,sql,Sql,我试图回答的问题需要我向DB查询: 列出2016年11月25日当天的免费房间 这就是我到目前为止所做的 SELECT room_no FROM booking b JOIN room ON b.room_no = room.id WHERE booking_date = '2016-11-25' AND occupants IS NULL 我已将其修改为: SELECT room_no FROM booking b JOIN room ON b.room_no = room.id JOIN g

我试图回答的问题需要我向DB查询: 列出2016年11月25日当天的免费房间

这就是我到目前为止所做的

SELECT room_no FROM booking b
JOIN room ON b.room_no = room.id
WHERE booking_date = '2016-11-25' AND occupants IS NULL
我已将其修改为:

SELECT room_no FROM booking b
JOIN room ON b.room_no = room.id
JOIN guest ON guest_id = guest.id
WHERE booking_date = '2016-11-25' AND guest_id IS NULL
我仍然得到没有值的表头,而我应该得到房间ID 207210304

我肯定我遗漏了什么,但我就是看不出有什么,非常感谢您的帮助

谢谢:


您没有考虑夜数,因此逻辑更像这样:

SELECT room_no
FROM room r LEFT JOIN
     booking b
     ON b.room_no = room.id AND
        '2016-11-25' < booking_date + interval nights day AND
        '2016-11-25' >= booking_date
WHERE b.room_no IS NULL;

尽管您的SQL查询不正确,但您可以检查占用者是否为NULL,但不能将其与=运算符进行比较,您正在执行内部联接,这将只返回两个表中匹配的行

当天未预订的房间不应关联预订,因为没有人预订。您必须在11月25日或该日期之前预订未预订的房间,并在该日期之后预订

您可以通过子查询获得所需内容:

SELECT id FROM room 
WHERE id NOT IN
    (SELECT room_no FROM booking
     WHERE (DATE_ADD(booking_date, INTERVAL nights DAY) > '2016-11-25'
            AND booking_date <= '2016-11-25'))

我假设您使用的是MariaDB,因此我使用了DATE_ADD函数,因为这是SQLZOO似乎基于的DBMS。

为空!请使用您正在使用的数据库进行标记。使用SQL标记的问题的答案应使用ISO/IEC标准SQL-这应该是可行的。SQLzoo有一个奇怪的命名约定。表名使用复数。表存储关于许多项的数据。列名使用单数。非常感谢。这是不正确的。尽管缺少AND在语法上是不正确的,并且没有空格为NULL,并且使用了错误的字段名,但是您应该在第二个字段中添加nights而不是Subtraction并使用=。