MySQL - 为什么count()会改变join
的行为我有一个简单的案例。活动和与会者。在我的测试下面没有与会者,但我仍然想要一个事件列表,所以我使用外连接,这是有效的。但是,如果我想要一个事件列表和与会者的数量,它只返回第一行。为什么
CREATE TABLE IF NOT EXISTS `event` (
`event_id` int(11) NOT NULL AUTO_INCREMENT,
`event_name` varchar(50) NOT NULL,
PRIMARY KEY (`event_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
CREATE TABLE IF NOT EXISTS `attendees` (
`event_id` int(11) NOT NULL,
`attendee` varchar(50) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `event` (`event_id`, `event_name`)
VALUES
(1, 'event one'),
(2, 'event two'),
(3, 'event three');
SELECT e.*, a.attendee
FROM `event` e
left outer join attendees a on e.event_id = a.event_id
返回:
event_id event_name attendee
---------------------------------
1 event one NULL
2 event two NULL
3 event three NULL
然而:
SELECT e.*, count(a.attendee)
FROM `event` e
left outer join attendees a on e.event_id = a.event_id
只返回:
event_id event_name count(a.attendee)
---------------------------------------------
1 event one 0
为什么?
答案 0 :(得分:3)
如果在未指定GROUP BY的情况下添加聚合函数,则会得到一行对应于包含所有行的单个组。
如果你想要每组计数,你应该添加一个明确的GROUP BY子句。
SELECT e.*, COUNT(a.attendee)
FROM `event` e
LEFT OUTER JOIN attendees a ON e.event_id = a.event_id
GROUP BY e.event_id