mysql - SQL Join 仅返回一条记录

标签 mysql database join count

我正在编写一个查询,试图计算报告和分配表中的记录总数,同时从主表组中检索信息。 Group 有一个主键 id,它作为 gid 保存在其他表中。这是查询:

SELECT  `group`.`id` AS `gid`
        , `group`.`name` AS `g_name`
        , COUNT(`report`.`id`) AS `reports` 
FROM    `group` 
        LEFT OUTER JOIN `report` ON `report`.`gid` = `group`.`id` 
        LEFT OUTER JOIN `assignment` ON `assignment`.`gid` = `group`.`id` 
WHERE   `group`.`active` = 0 
ORDER BY 
        `group`.`name`;

我的问题是,每当我执行此操作时,即使它们有多个组,也只会返回一条记录。

提前致谢。

最佳答案

好吧,您的查询远不正确:)首先,您不应该使用没有 group by 子句的聚合函数(在本例中为 count)。现在,即使您有该子句,查询也会汇总信息,而您希望同时获得:同一查询中的详细信息和摘要。我建议使用 2 个单独的查询来检索此信息,但如果您希望仅将信息混合在一个查询中(详细信息以及“报告和分配表中的记录总数”),请尝试以下查询:

SELECT 
    `group`.id AS gid, 
    `group`.name AS g_name, 
    (SELECT COUNT(*) from report) as ReportTotalCount,
    (SELECT COUNT(*) from assignment) as AssignmentTotalCount,
FROM `group`
WHERE `group`.`active` = 0 
LEFT OUTER JOIN report ON report.gid = `group`.id
LEFT OUTER JOIN assignment ON assignment.gid = `group`.id
ORDER BY `group`.name;

我希望我能准确理解您正在寻找的内容,但这可能会让您了解如何获得您期望的结果。

关于mysql - SQL Join 仅返回一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9721540/

相关文章:

mysql - 优化查询以查找订单之间的最大时间跨度

MySQL:获取详细页面和摘要页面的总数

java - 在用Java为该应用程序编码应用程序时,如何存储主机地址,数据库的用户名和密码以及其他安全信息?

mysql - 查询错误 (1054) : Unknown column 'TableValue' in 'where clause'

PHP/SQL - 无法打开流 : No such file or directory

Django 1.5 + Postgres 数据库记录消失

database - SQLite:我应该在断开连接之前分离附加的数据库吗?

带有 COUNT 的 MySQL 查询和来自另一个表的连接列

MySQL选择连接中没有匹配的地方

android - MySQL 数据库连接