gpt4 book ai didi

MySQL - 为什么 count() 会改变外连接的行为?

转载 作者:行者123 更新时间:2023-11-29 02:07:22 24 4
gpt4 key购买 nike

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

为什么?

最佳答案

当您添加聚合函数而不指定 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

关于MySQL - 为什么 count() 会改变外连接的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com