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

时间:2011-02-14 15:19:02

标签: sql join

我有两个表,一个名为日历,另一个名为事件。日历中可以有多个日历和多个事件。我想选择每个日历,同时获取日历中的活动数量。

这就是我所拥有的:

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

但这不起作用。 没有活动的项目仍会返回1 有什么想法吗?

4 个答案:

答案 0 :(得分:18)

您需要使用

COUNT(E.calendar)

在没有匹配项的行中,其值为NULLNULL值不计算在内。

答案 1 :(得分:7)

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

试试这个:

SUM(case when e.Calendar is null then 0 else 1 end)

答案 2 :(得分:1)

怎么样:

SELECT C.*, (SELECT COUNT(*) FROM events E WHERE E.calendar=C.ID) as NumEvents
FROM calendars C

答案 3 :(得分:0)

试试这个:

SELECT C.*,
    (
        SELECT COUNT(*)
        FROM [events] AS E
        WHERE E.calendar = C.ID) AS [events]
FROM [calendars] AS C;