首页 > 解决方案 > 我需要有关 SQL 查询的帮助

问题描述

我需要知道我的查询是否正确这是数据库架构:

Hotel (hotelNo, hotelName, city)
Room (roomNo, hotelNo, type, price)
Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo)
Guest (guestNo, guestName, guestAddress)

列出 10 月份酒店编号为“H004”的未入住客房详情。这是我写的:

 SELECT*
FROM Room r,Hotel h 
WHERE r.hotelNo=h.hotelNo AND hotelNo='H004'
      AND roomNo NOT IN 
      (SELECT roomNo
       FROM Booking b,Hotel h
       WHERE dateFrom='1-Oct'
              AND dateTo='31-Oct'
       AND b.hotelNo=h.hotelNo
        AND hotelNo='H004');

标签: mysqlsqldatetimesubquerywhere-clause

解决方案


我会这样说not exists

select r.*
from rooms r
where r.hotelno = 'H004' and not exists (
    select 1
    from booking b
    where 
        b.hotelno = r.hotelno 
        and b.roomno = r.roomno
        and b.datefrom <  '2020-11-01'
        and b.dateto   >= '2020-10-01'
)

其内容为:查找指定酒店中与 2020 年 10 月重叠的所有客房。

笔记:

  • 你不需要带hotel桌子就可以得到你想要的结果;如果您需要:使用标准连接!隐式连接(from子句中的逗号是遗留语法,不应在新代码中使用)

  • MySQL 将日期文字理解为格式中的字符串YYYY-MM-DD


推荐阅读