也许有人可以对我一整天都在与之抗争的声明有所了解:)
我有 3 张桌子
假期
holidayID | userID | dateFrom   | dateTo
1         |      1 | 2012-01-01 | 2012-01-01
2         |      1 | 2012-01-15 | 2012-01-20
地位
statusID | holidayID | statusText
1        |         1 | accepted
2        |         2 | declined
用户设置
id | userID | HolidaysAllowed
1  |      1 | 20
我想要做的是得到以下结果
结果
HolidaysAllowed | HolidaysLeft (Allowed - Taken) | HolidaysTaken (Sum of Holidays)
20              |                             19 |      1
如果我不说明状态,我可以获得所有三列 - 这是我得到的最接近的
SELECT 
IFNULL(SUM( IF(  h.dateTo = h.dateFrom, 1, DATEDIFF( h.dateTo, h.dateFrom ) ) ), 0) AS holidaysTaken, 
IFNULL(us.HolidaysAllowed - ( SUM(  IF(  h.DateTo = h.DateFrom, 1, DATEDIFF( h.DateTo, h.dateFrom ) ) ) ), 0) AS holidaysLeftover, 
us.HolidaysAllowed
FROM userSettings us 
LEFT JOIN holiday h 
ON h.userID = 1 
JOIN status s 
ON s.holidayID = h.holidayID AND s.statusID = 1 
WHERE 
us.userID = 1
GROUP BY h.userID;
主要问题是,如果没有 statusID = 2 的假期,则结果列 1 和 2 为 0(这是正确的)但第 3 列(HolidaysAllowed)为 NULL(不正确,因为它需要始终从表 UserSettings 返回值) . 仅当至少有 1 条记录(假期)具有正确的状态时,上述查询才会返回正确的响应......我做错了什么?:)
它只是让我发疯:)提前感谢您的帮助!非常感激!
更新
感谢所有评论的人......预期结果如下获取所有状态= 1(即接受)的假期,然后根据允许的假期计算假期统计数据。IE
总共 20 天,接受 1 个假期 = 还剩 19 天
再次感谢