2
MySQL - 为什么count()改变加入的行为MySQL - 为什么count()会改变外连接的行为?
我有一个简单的例子。活动和与会者。在我下面的测试中,没有与会者,但我仍然想要一个事件列表,所以我使用了一个外部联接并且可以工作。但是,如果我需要事件列表和与会者数量,它只会返回第一行。为什么
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
为什么呢?
完美 - 工程! SELECT e。*,count(a.attendee)FROM'event' e left outer join attendees a on e.event_id = a.event_id group by event_id – sdfor 2010-08-28 23:41:56
如果我需要参加者人数和广告人名单? – sdfor 2010-08-29 00:46:48
@sdfor:我会做两个单独的查询。或查询与会者列表,然后在客户端中对其进行计数。 – 2010-08-29 00:49:04