mysql - 检查日期可用性的子查询
问题描述
你能帮我找到我的查询问题的解决方案吗?我已经坚持了一周,所以我决定尝试寻求帮助并学习一些东西。我正在使用 MySQL 数据库。
现在我有一张没有“搜索功能”的桌子。
SELECT
r.rId,
r.rName,
r.rPrice,
b.capacity
FROM
room r,
(SELECT roomId, SUM(bCapacity) AS capacity FROM bed GROUP BY roomId) AS b
WHERE r.rId = b.roomId;
这是结果:
我想在表格中显示在入住和退房日期内未入住的所有房间。
我有:
2 个输入:
- 登记日期
- 离开日期
3张桌子:
- 房间(我拿身份证,名字,价格),
- 床位(我总结了给定房间的床位容量),
- 预订(这里我想检查是否使用了某个 roomId)
现在我有一个查询,检查是否在某个范围内预订了任何房间。如果日期发生冲突,它会从带有 roomId 的预订中返回给我的表格。
SELECT
roomId,
bCheckIn,
bCheckOut
FROM booking
WHERE (bCheckOut > ? AND bCheckIn <= ?) AND bStatus = 'Upcoming' OR 'Archived';
第一的 ?是入住日期和第二个?是退房日期输入。在这里,我通过上述日期并返回在该日期范围内拍摄的房间。
这是结果:
概括
是否可以将这两个查询结合起来,这样我只会得到一个带有第一个查询数据的表,但不包括从第二个查询中占用的房间?我的查询合并失败。
解决方案
我想你想要not exists
:
select r.*
from rooms r
where not exists (select 1
from booking b
where b.roomid = r.id and
b.checkindate < :end_date and
b.checkoutdate >= :start_date
);
如果你正在学习 SQL,你应该学习正确的、明确的、标准的、可读的JOIN
语法。 切勿在FROM
子句中使用逗号。
推荐阅读
- c++ - 如何获取 std::any 变量的数据类型?
- reactjs - 将更改 blob url 发送到 axios 可以处理的图像
- payment - 如何在 MPGS 网关中创建商家帐户
- assembly - mips 汇编中的判别式和根
- c# - 如何将子属性绑定到父属性的修改值,例如高度或宽度?
- react-native - 为什么堆栈导航不适用于这些屏幕?
- python - Collections.deque() EOFError: 读取一行时出现 EOF
- python - 如何使用networkx获得对偶图?
- javascript - Datables serverSide ajax POST 'error':“int() 参数必须是字符串、类似字节的对象或数字,而不是 'NoneType'”
- javascript - 如何在 React 中使用 getElementById?