0

我正在尝试编写一个 SQL 语句来检查我的数据库中房间的可用性。它需要完成以下工作:

1) 检查ts_roomprefts_roomts_request看房间是否被预订

  • 如果房间根本没有被预订,那么在ts_roompref中检查ts_room_pref.request_id并与 ts_request.id 进行比较,将找不到ts_request中的 day_id 和period_id
  • 在找不到房间入口的情况下(即没有被请求),那么房间是免费的

2)如果对比ts_requestts_roompref后发现了day_idperiod_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

4

1 回答 1

0

查询中的“LIKE”条件附近应该有百分号

... day_id LIKE "%1%" AND period_id LIKE "%1%"
于 2013-02-19T13:41:58.013 回答