我在与我的一次SQL查询的问题...SQL计数值返回0,即使没有被分配房间
D.0.02已分配1天时间为1,所以应该算0.但它尚未分配给第一天2.为什么它返回为0?
SELECT COUNT(DISTINCT rm.Id)
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 room_id = "D.0.02"
AND (a.status IS NULL OR a.status IN ('Pending', 'Failed', 'Declined'))
AND (day_id=1 AND period_id=2)
这里是我的小提琴:http://sqlfiddle.com/#!2/5e1de/13
如果状态不是未决的,失败的,衰落的房间被忽略,但它可能是免费为其他期间或数天,但没有预订 - 如果不预订那么它没有被分配 - 这意味着day_id和period_id将不存在,但房间仍然可以自由预订。
这似乎是我需要重新键入我的SQL查询。有关如何的建议?
除了不正确的状态条款,我的理解是所需的结果集应该返回1点,记录即。使用子句<<(day_id = 1 AND period_id = 2)>>这两个条件必须为真,但是“D.0。02分配给第1天期间1“,所以我认为子句应该是”AND(rq.day_id = 1 AND rq.period_id IN(1,2))>>。你应该澄清/发布预期/期望的结果集,对于特定的房间得到分配和/或要求在特定的日期/期间。希望这可以帮助至少澄清你想从这个查询什么。 – 2013-02-19 11:09:34
你可以请示例在SQLFiddle – methuselah 2013-02-19 11:15:22
刚刚编辑你的示例 - 但请注意我忽略了状态条款对我不清楚,请根据需要编辑http://sqlfiddle.com/#!2/5e1de/140 – 2013-02-19 11:22:43