mysql - 只用一张 table 检查可用时间?

标签 mysql sql

我有一张 table ,上面有一张预订 list 。每个预订都有一个 ID(主键)、一个 roomNumber、一个 startTime 和一个 endTime

我正在尝试查找在特定时间范围内哪些房间可用。因此,如果我想查看 5 点到 7 点之间是否有空闲房间,我会搜索表格并找到当时没有预订的房间。

起初我以为我可以这样做:

SELECT DISTINCT roomNumber
FROM  `reservations` A
WHERE NOT 
EXISTS (

SELECT NULL 
FROM  `reservations` B
WHERE A.roomNumber = B.roomNumber
AND (
B.starttime >  '5:00:00'
AND B.starttime <  '7:00:00'
)
OR (
B.endtime >  '5:00:00'
AND B.endtime <  '7:00:00'
)
)

但我很快意识到为什么这不起作用。由于所有预订都在同一个表中,如果它找到时间不冲突的行,它将返回房间号。这意味着如果 4 号房间在 5-7 号有预订,而另一个房间在 3-4 号有预订,我的查询仍会返回 4 号房间,因为根据我的条件,3-4 行在技术上评估为 True。

我无法修改表格,我不确定该怎么做,因为我从未遇到过这样的事情。

最佳答案

尝试将您的条件更改为这些。

SELECT DISTINCT roomNumber
FROM  `reservations` A
WHERE NOT 
EXISTS (

SELECT NULL 
FROM  `reservations` B
WHERE A.court = B.court
AND (
B.starttime <  '7:00:00'
AND B.endtime >  '5:00:00'
)
)

关于mysql - 只用一张 table 检查可用时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42458547/

相关文章:

java - 我无法使用java导出数据库。谁能帮我?

mysql - 为什么添加 AUTO_INCREMENT 需要这么长时间?

sql - 如何编写SQL来在Oracle中显示我的案例中的数据?

SQL检查表是否存在并截断

mysql - 如何使用SQL加载数据到表中自动添加列?

mysql - 在类别旁边显示所有类别以及该类别中的帖子数

php - 使用内部连接更新时使用 mysql 查询的高 CPU

mysql - 在JavaFX中如何在 TableView 中添加带有数据的组合框

sql - 甲骨文 00932.00000 - "inconsistent datatypes: expected %s got %s"

mysql - 当行不存在时显示计数值 0 MYSQL