尝试使用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));
答案 0 :(得分:1)
您需要使用RIGHT JOIN
或切换LEFT JOIN
中表格的顺序。当您使用LEFT JOIN
时,它会从左表中选择所有匹配的行,它是允许在ON
条件下进行不匹配的正确表格。
此外,您需要将表中可能缺少行的任何条件移动到ON
子句中。在WHERE
或HAVING
中对其进行测试会过滤掉这些行,因为如果列不匹配,则列全部为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