SQL:获取从左连接返回的行数

Bra*_*ldt 6 sql join

我有两个表,一个叫做日历,另一个叫做事件.日历中可以有多个日历和多个事件.我想选择每个日历,同时获取日历中的事件数量.

这就是我所拥有的:

SELECT C.*, COUNT(*) AS events FROM `calendars` AS C 
    LEFT JOIN `events` E ON C.ID=E.calendar 
    GROUP BY C.ID
Run Code Online (Sandbox Code Playgroud)

但这不起作用.没有事件的项目仍然返回1.有任何想法吗?

Mar*_*ith 18

你需要使用

COUNT(E.calendar)
Run Code Online (Sandbox Code Playgroud)

在没有匹配的行上,它的值将是NULL,NULL并且不计算值.

  • 哇!这比接受的答案更简单,谢谢! (2认同)

pco*_*fre 7

问题是你计算行数,而没有事件的日历仍然有一行他的日历.

试试这个:

SUM(case when e.Calendar is null then 0 else 1 end)
Run Code Online (Sandbox Code Playgroud)