Mysql如何做这个查询

标签 mysql

SELECT u.username, count(t.tid) as total
FROM tbl2 t
JOIN users u ON t.userid = u.userid
GROUP BY t.userid

上面的查询工作正常,它返回在 tbl2 表中至少有一个任务的每个用户的总任务数。

但我想做的是返回所有用户,即使用户在第二个 tbl2 表中没有任何关联的记录。对于没有任何记录的用户,我希望总数显示为 0,我该如何实现?

最佳答案

给出的其他答案的问题是您要选择所有没有关联记录的用户;使用 LEFT JOIN,users 表位于连接的错误(可为空)端。您可以将 LEFT JOIN 替换为 RIGHT JOIN,但我总觉得这种语法不直观。

标准答案是在使用 LEFT JOIN 时反转表的顺序:

SELECT u.username, count(t.tid) as total
FROM users u
LEFT JOIN tbl2 t ON t.userid = u.userid
GROUP BY u.username

请注意,更好的做法是(在某些 DBMS 中,这是必需的)对 SELECT 列表中的非聚合列进行分组,而不是对用户 ID 进行分组并选择用户名。

关于Mysql如何做这个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967161/

相关文章:

mysql - 选择与 exapain 行不同的计数 (*)

php - 将数据库调用添加到 OO PHP 的最佳方法

mysql - 物化路径和SQL查询解释

php - 将远程数据复制到本地数据库

python - Django 数据库 - 如何在原始 SQL 中添加此列

php - SQL 查询在日期时间字段后 X 小时停止显示行

mysql - 在 phpMyAdmin 中导入带有多边形数据的 CSV

MySql 和排除结果集的变量

PHP MYSQL : insert dont work with prepared statement

有限制的 MySQL top count({column})