将SQL查询从一个条件更改为多个

时间:2013-02-19 00:44:21

标签: mysql

我有一个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)

1 个答案:

答案 0 :(得分: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'))