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
equal1
?您好,谢谢回复,它仍然返回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