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