【发布时间】:2014-07-27 22:04:22
【问题描述】:
我有这个 SQL 查询:
SELECT r.room_id AS room_id,
room_name,
num_rooms,
max_people,
min_rate
FROM room r
LEFT JOIN(SELECT b.room_id,
accom_id,
COALESCE(Count(b . room_id), 0) AS bookings
FROM booking b
WHERE arr_date >= :ind
AND dep_date <= :outd
GROUP BY room_id) t
ON( t.accom_id = r.accom_id
AND r.room_id = t.room_id )
WHERE r.accom_id = :id
AND ( t.bookings < num_rooms
OR t.bookings IS NULL )
GROUP BY room_name
与以下 SQL 表有关:
它在预订表中有此信息用于测试目的:
问题是:
当我运行 :ind 是 2014-07-27 和 :outd 是 2014-07-29 的查询时,我没有得到任何回报,这正是我所期望的!但是,如果我将日期更改为 2014-07-28(:ind) 和 2014-07-29(:outd)
两个房间都还给我了!这是不正确的。 Room_id 2 应该返回给我,因为之前的客人会在 28 日离开,所以 28-29 是免费的,但 room_id 1 不应该是可用的,因为客人在 29 日之前仍然在其中。
如何解决这个逻辑错误?我的 SQL 哪里出错了?
编辑:“sql 实际上做了什么?”它的目的是检查房间何时有预订,如果房间在给定日期没有预订,则可以免费预订,因此它应该返回免费房间。基本上。
【问题讨论】:
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
-
你的列是什么类型的?