我正在编写一个查询,试图计算报告和分配表中的记录总数,同时从主表组中检索信息。 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/