上图显示了我的第一个表,称为事件。
上面的表链接到事件表,用于检查用户是否记录事件。我想获得显示事件详细信息时每个事件记录了多少的计数。我遇到的问题是,如果一个事件有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
任何帮助将不胜感激!
答案 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
关键字修改为ON
或JOIN
关键字,以允许外部连接。
外部联接将返回不匹配的行;确切地描述了用例。
LEFT
另一种替代方法是在SELECT列表中使用关联的子查询,而不是联接。假设RIGHT
是SELECT 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