【发布时间】:2014-02-23 17:12:10
【问题描述】:
我需要从查询中涉及的子表/连接表之一获取计数。我将用一个简单的例子来演示:
表:用户
id name etc
-------------------------------------------
1 u1
2 u2
表格:锻炼
id userId etc
-------------------------------------------
1 1
2 1
现在我需要从用户表中选择 id、name、etc 等各种字段以及 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吗? -
@AzizShaikh 我有,我想我很清楚,但在这种情况下,我无法让它工作。给我一些大脑放屁的时刻!
标签: mysql performance select join count