0

我有一个 SQL 查询,它检查名为 ts_allocation 的表中的值,以查看匹配的房间是否已“分配”(次要条件)。如果它们是“分配的”,那么它不会在结果中返回它们。不幸的是,由于设计限制,我的表中不能再出现这种情况了。

我现在想更改它,以便查看房间的值是否不是“待定”、“失败”或“拒绝”。如果它是三个中的任何一个,那么结果将被返回并且不会被忽略(与以前不同)。

在第一个 where 子句中获取房间后,系统需要在 ts_allocation 表中检查它们是否为“Pending”、“Failed”或“Declined”。房间可以预订特定日期或时间段 - 但如果其状态仍为“待定”、“失败”或“已拒绝”,则会查看该房间。其他任何事情都意味着房间已被预订。

我希望我在这里有意义......到目前为止,这是我的代码:

SELECT 
  COUNT(*) totalCount 
FROM 
  ts_room rm
WHERE building_id=:building_id AND  
  NOT EXISTS (
    SELECT 1
    FROM ts_roompref rp
      JOIN ts_request rq
      ON rp.request_id = rq.id
      AND day_id = 4
      AND period_id = ".$i."
    WHERE 
      rm.id = rp.room_id)
AND NOT EXISTS (
    SELECT 1
    FROM ts_roompref rp
      JOIN ts_allocation a
      ON rp.request_id = a.request_id
      AND a.status = 'Allocated'
    WHERE 
      rm.id = rp.room_id)
4

1 回答 1

1

我假设你想要房间钥匙作为查询的结果......

SELECT DISTINCT rm.Id as RoomId
FROM ts_room rm LEFT JOIN ts_roompref rp ON rp.room_id = rm.id
  LEFT JOIN ts_request rq ON rq.id = rp.request_id
  LEFT JOIN ts_allocation a ON a.request_id = rq.id
WHERE building_id = :building_id
  AND (a.status IS NULL OR a.status IN ('Pending', 'Failed', 'Declined'))
于 2013-02-19T02:43:56.777 回答