SQL:获得从左连接返回的行数
问题描述:
我有两个表,一个名为日历,另一个名为事件。日历中可以有多个日历和多个事件。我想选择每个日历,并获取日历中的事件数量。SQL:获得从左连接返回的行数
这是我有:
SELECT C.*, COUNT(*) AS events FROM `calendars` AS C
LEFT JOIN `events` E ON C.ID=E.calendar
GROUP BY C.ID
但是,这并不工作。 没有事件的项目仍然返回1。 有什么想法?
答
的问题是,you're计数行,而没有的活动日历,还有他的日历的一行。
试试这个:
SUM(case when e.Calendar is null then 0 else 1 end)
答
您需要使用
COUNT(E.calendar)
的行不匹配的这个值将是NULL
和NULL
值不计算在内。
+2
哇!这比接受的答案更简单,谢谢! – dimsuz 2014-06-27 10:43:21
答
如何:
SELECT C.*, (SELECT COUNT(*) FROM events E WHERE E.calendar=C.ID) as NumEvents
FROM calendars C
答
试试这个:
SELECT C.*,
(
SELECT COUNT(*)
FROM [events] AS E
WHERE E.calendar = C.ID) AS [events]
FROM [calendars] AS C;
这工作完美,并没有涉及低效率的子选择。谢谢! – 2011-02-14 15:52:27