Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正在返回计数为0的行_Mysql_Sql_Count - Fatal编程技术网

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,谢谢您的帮助。