我正在尝试编写一个 SQL 语句来检查我的数据库中房间的可用性。它需要完成以下工作:
1) 检查ts_roompref、ts_room和ts_request看房间是否被预订
- 如果房间根本没有被预订,那么在ts_roompref中检查ts_room_pref.request_id并与 ts_request.id 进行比较时,将找不到ts_request中的 day_id 和period_id。
- 在找不到房间入口的情况下(即没有被请求),那么房间是免费的
2)如果对比ts_request和ts_roompref后发现了day_id和period_id的值,那么说明我们需要查找ts_allocation表来查看房间的状态
- 如果请求状态为“Pending,Failed,Declined”,则表示该房间尚未分配,仍然可用
- 但是,如果任何请求状态 = 其他任何内容,则表示房间已被分配。
我已经挣扎了几个小时试图实现这个逻辑。到目前为止,这是我所做的有效的工作:
select 1- count(distinct rp.Id) from
ts_roompref rp, ts_request rq
where rp.room_id= "D.0.02" AND rq.id = rp.request_id
AND day_id like "1" AND period_id like "1";
上面的代码没有考虑到这个事实可能是 Pending、Allocated 或 Declined。如果可以找到 request_id,它只是假设房间已被预订。如何改进它以检查请求状态(如有必要)?
这是我的 SQL 小提琴:http ://sqlfiddle.com/#!2/e1021/48