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