mysql - 从子表中选择计数

标签 mysql performance select join count

我需要从查询中涉及的子表/连接表之一获取计数。我将用一个简单的例子来演示:

表:用户

    id             name            etc
-------------------------------------------
    1               u1
    2               u2

表:练习

    id             userId            etc
-------------------------------------------
    1               1
    2               1

现在我需要从用户表中选择各种字段,如idname以及各种用户的计数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/

相关文章:

Mysql8 xdevapi node.js CRUD table.select 问题

PHP PDO execute() 返回重复结果

css - 是否可以为 JavaFX 8 中的单个节点禁用 CSS 样式?

python - Python 2.7 中更快的 io 有哪些其他选项

c# - 如何处理linq中的空值?

mysql - 从 MySQL 数据库中搜索 LongBlob 列中的文本

MySQL Replication Binlog 文件位置未更新

c - 基准 C 结构比较 : XOR vs ==

MYSQL:无法选择值,尽管我知道它们在那里

sql - 根据多个条件选择行