mysql内部连接问题

mysql内部连接问题,mysql,Mysql,我正在尝试以下查询,以便在用户页上显示我的所有用户 SELECT u.id, u.username, u.email, u.active, u.admin, u.team_id, t.name AS team_name, sum( s.score ) AS total_score FROM users u INNER JOIN teams t ON u.team_id = t.id INNER JOIN stats s ON u.id = s.user_id 我的users表中有4个用户,我想

我正在尝试以下查询,以便在用户页上显示我的所有用户

SELECT u.id, u.username, u.email, u.active, u.admin,
u.team_id, t.name AS team_name, sum( s.score ) AS total_score
FROM users u
INNER JOIN teams t ON u.team_id = t.id
INNER JOIN stats s ON u.id = s.user_id
我的users表中有4个用户,我想列出所有用户,但如果使用内部联接,它只返回1行。检查数据结构如下

| id | game | user_id | rank | score | dnt |
+----+------+---------+-------+------+-----+
|  1 | test | 5       | 2    | 2200  | 
+--------+----------+----------+-----+-----+
|  2 | test | 3       | 1    | 2500  | 
+--------+----------+----------+-----+-----+
团队

使用者


您需要使用
分组依据
,以便在不同的用户之间分割分数的总和,如果您使用
左联接
,则即使每个用户实例在统计表中没有行,您也会确保为其获得一行(然后,按照建议使用
合并
,总和将为
0

比如:

SELECT u.id, u.username, u.email, u.active, u.admin,
u.team_id, t.name AS team_name, sum( COALESCE(s.score) ) AS total_score
FROM users u
LEFT JOIN teams t ON u.team_id = t.id
LEFT JOIN stats s ON u.id = s.user_id
GROUP BY u.id, u.username, u.email, u.active, u.admin,
u.team_id, t.name

这是未测试的

为什么
user1
user2
都有
id
equal
1
?您好,谢谢回复,它仍然返回3行而不是4行。我们在用户表中有4个用户,如果我们执行简单的
SELECT*from users
我们会得到4个用户,但使用内部连接会得到3行/用户。如果一些用户没有统计数据,则可以使用统计数据的左连接,并在总和中合并。@Daniele实际上
按u.id分组
应该足够了:)您好,我用左连接更新了内部连接,它能工作,你知道为什么吗?@Karolis:限制groupby表达式中的列数是mysql对SQL的攻击,可能会导致完全错误的查询(特别是对于初学者),使groupby成为SQL中应该的列更好,每个不是聚合的SELECT列都应该出现在groupby中。
| id | username | email | team_id |
+----+----------+-------+---------+
|  1 | user1    |       | 1       |
+----+----------+-------+---------+
|  1 | user2    |       | 2       |
+----+----------+-------+---------+
SELECT u.id, u.username, u.email, u.active, u.admin,
u.team_id, t.name AS team_name, sum( COALESCE(s.score) ) AS total_score
FROM users u
LEFT JOIN teams t ON u.team_id = t.id
LEFT JOIN stats s ON u.id = s.user_id
GROUP BY u.id, u.username, u.email, u.active, u.admin,
u.team_id, t.name