MYSQL返回记录事件的人数

时间:2018-11-13 20:38:35

标签: mysql sql

https://imgur.com/O1v3O8w

上图显示了我的第一个表,称为事件。

https://imgur.com/7Hbsitl

上面的表链接到事件表,用于检查用户是否记录事件。我想获得显示事件详细信息时每个事件记录了多少的计数。我遇到的问题是,如果一个事件有0个日志,它将不会出现在输出中。

这是使用的sql ive:

SELECT event.`eventid`,
       event.`name`,
       `eventtime`,
       `location`,
       `datecreated`,
       `dateofevent`,
       `categoryname`,
       `description`,
       Count(participantlogs.eventid)
FROM   event,
       recreationalcategory,
       participantlogs
WHERE  recreationalcategory.categoryid = event.categoryid
       AND participantlogs.eventid = event.eventid
GROUP  BY event.eventid 

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

放弃联接操作的老式逗号语法,并改用If (MyList.Items.Item(471)).ToString = "" AndAlso (CDec((MyList.Items.Item(475)).ToString) > 0D OrElse CDec((MyList.Items.Item(479)).ToString) > 0D) Then MessageBox.Show("FUELING DATE #1 CANNOT BE BLANK", "Critical Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Else tbDate1.Text = (MyList.Items.Item(471)).ToString End If 关键字,将联接谓词重新定位到If condition1 AndAlso (condition2 OrElse condition3) Then 子句。可以将JOIN关键字修改为ONJOIN关键字,以允许外部连接。

外部联接将返回不匹配的行;确切地描述了用例。

LEFT

另一种替代方法是在SELECT列表中使用关联的子查询,而不是联接。假设RIGHTSELECT e.eventid , e.name , COUNT(p.eventid) FROM event e LEFT JOIN recreationalcategory c ON c.categoryid = e.categoryid LEFT JOIN participantlogs p ON p.eventid = e.eventid GROUP BY e.eventid , e.name 表中的PRIMARY KEY或UNIQUE KEY,我们可以消除eventid子句...

event

答案 1 :(得分:0)

左联接应该可以完成您的工作。

SELECT event.`eventid`,
       event.`name`,
       `eventtime`,
       `location`,
       `datecreated`,
       `dateofevent`,
       `categoryname`,
       `description`,
       Count(participantlogs.eventid)
FROM   event,
       recreationalcategory,
       participantlogs
WHERE  (recreationalcategory.categoryid = event.categoryid OR recreationalcategory.categoryid  is null)
       AND participantlogs.eventid = event.eventid
GROUP  BY event.eventid

只需使用left join

SELECT event.`eventid`,
           event.`name`,
           `eventtime`,
           `location`,
           `datecreated`,
           `dateofevent`,
           `categoryname`,
           `description`,
           Count(participantlogs.eventid)
     FROM   event 
     left join recreationalcategory 
       on recreationalcategory.categoryid = event.categoryid
     join participantlo on
       on participantlogs.eventid = event.eventid
    GROUP  BY event.eventid