返回0计数的行

时间:2017-06-04 03:15:02

标签: mysql sql count

尝试使用tblEmployeeBooking上的计数功能返回已预订的工作人员数量以执行特定事件;此值将用作tblEvent所需人员数量的比较。

目前,以下声明不会返回tblEvent

内零计数的所有tblEmployeeBooking条记录
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));

1 个答案:

答案 0 :(得分:1)

您需要使用RIGHT JOIN或切换LEFT JOIN中表格的顺序。当您使用LEFT JOIN时,它会从左表中选择所有匹配的行,它是允许在ON条件下进行不匹配的正确表格。

此外,您需要将表中可能缺少行的任何条件移动到ON子句中。在WHEREHAVING中对其进行测试会过滤掉这些行,因为如果列不匹配,则列全部为NULL,并且不会= 0

并且您不应该使用GROUP BY中子表格中的任何列,因为如果没有匹配,那么这些列将全部为NULL,并且他们会这样做集体在一起。在这种情况下,tblEmployeeBooking.cancelled分组是没有意义的,因为您只选择了cancelled = 0的行,因此他们无论如何都会在同一个群组中。< / p>

所以它应该是:

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