【问题标题】:I need help on SQL Queries [closed]我需要有关 SQL 查询的帮助 [关闭]
【发布时间】:2020-11-21 10:13:28
【问题描述】:

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

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');

【问题讨论】:

  • 你的问题不是很清楚。您得到的错误或无效结果是什么?也许你可以把这个问题分成几个问题,因为它似乎问了多个不相关的问题。标题也可以更清晰,指的是您遇到的错误或困难。个人背景只会增加问题的噪音(严重需要帮助,不要评判我)祝你好运!

标签: mysql sql datetime subquery where-clause


【解决方案1】:

我会用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 的字符串

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 2011-02-22
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多