Mysql 正在返回计数为0的行
尝试使用Mysql 正在返回计数为0的行,mysql,sql,count,Mysql,Sql,Count,尝试使用tblEmployeeBooking上的计数功能返回已预订参加特定活动的员工人数;此值将用作与tblEvent中所需员工数量的比较 当前,下面的语句不返回任何tblEmployeeBooking中计数为零的tblEvent记录 SELECT e.eventID , e.staffQuantity , Count(b.eventID) AS CountOfeventID FROM tblEmployeeBooking b LEFT JOIN tblEven
tblEmployeeBooking
上的计数功能返回已预订参加特定活动的员工人数;此值将用作与tblEvent
中所需员工数量的比较
当前,下面的语句不返回任何tblEmployeeBooking
中计数为零的tblEvent
记录
SELECT e.eventID
, e.staffQuantity
, Count(b.eventID) AS CountOfeventID
FROM tblEmployeeBooking b
LEFT
JOIN tblEvent e
ON b.eventID = e.eventID
GROUP
BY e.eventID
, e.staffQuantity
, b.cancelled
HAVING (((b.cancelled)=0));
您需要使用
右连接
,或者在左连接
中切换表的顺序。使用LEFT JOIN
时,它会从左侧表中选择所有匹配的行,在ON
条件下,允许右侧表具有不匹配的行
此外,还需要将表中可能缺少行的任何条件移动到on
子句中。在中测试它们,其中
或具有
将过滤掉这些行,因为当不存在匹配项时,列都是NULL
,这并不=0
您不应该使用groupby
中的子表中的任何列,因为当不匹配时,这些列都将NULL
,并且它们将一起分组。在这种情况下,按tblEmployeeBooking.cancelled
分组没有意义,因为您只选择了cancelled=0
的行,所以它们无论如何都将在同一组中
因此,它应该是:
SELECT tblEvent.eventID, tblEvent.staffQuantity, Count(tblEmployeeBooking.eventID) AS CountOfeventID
FROM tblEvent
LEFT JOIN tblEmployeeBooking ON tblEmployeeBooking.eventID = tblEvent.eventID AND tblEmployeeBooking.cancelled = 0
GROUP BY tblEvent.eventID, tblEvent.staffQuantity
别名是brilliant@Strawberry我通常在回答中使用短别名,但在这种情况下,剪切粘贴他的查询并重新排列太容易了,所以我不想用别名替换所有表名。@Barmar,谢谢您的帮助。