我需要从查询中涉及的子表/连接表之一获取计数。我将用一个简单的例子来演示:
表:用户
id name etc
-------------------------------------------
1 u1
2 u2
表:练习
id userId etc
-------------------------------------------
1 1
2 1
现在我需要从用户表中选择各种字段,如id
、name
、等
以及各种用户的计数exercise
表中的 id。
例如,在上述情况下,我需要输出:
id name count
-------------------------------------------
1 u1 2 --since two u1's are present in exercise
2 u2 0 --since no u2's are present in exercise
我试过这个:但是我得到语法错误:
--actual query is very complex
SELECT u.id, u.name, COUNT(e.*)
FROM user AS u
JOIN exercise AS e ON u.id = e.userId
我试过这个:但我再次遇到语法错误:
--actual query is very complex
SELECT u.id, u.name, (SELECT COUNT(*) FROM e)
FROM user AS u
JOIN exercise AS e ON u.id = e.userId
这作为一个子查询是有效的,但是速度慢得令人痛苦(每个表中大约 10000 行需要 5 到 13 秒):
--actual query is very complex
SELECT u.id, u.name, (SELECT COUNT(*) FROM exercise WHERE e.userId = u.id)
FROM user AS u
有没有办法在 join
左右的帮助下,在一个查询中获取 count
信息?子查询对我的需求来说非常慢。
最佳答案
尝试使用 GROUP BY
,如下所示:
SELECT u.id, u.name, COUNT(e.userId)
FROM user AS u
LEFT JOIN exercise AS e
ON u.id = e.userId
GROUP BY u.id
关于mysql - 从子表中选择计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472769/