我在與我的一次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