使用INNER JOIN多表查询:统计用户上传文档关联凭证数
问题分析
你的SQL存在三个核心问题:
- 表名错误:实际凭证表名为
Proofs,但你写的是Proof - 不必要的关联:关联
Proofs表会引入重复行,导致统计结果偏大(比如documentID=1的记录中,proofID=1对应两条Files记录,关联后会生成两行,最终COUNT结果为3) - 缺少分组:没有按文档维度分组,所有符合条件的记录被合并成一行统计
正确SQL查询方案
SELECT d.name AS document, COUNT(DISTINCT f.proofID) AS proof, f.path AS path FROM files f INNER JOIN documents d ON f.documentID = d.id WHERE f.userID = 1 GROUP BY d.id, d.name, f.path
说明
- 使用
COUNT(DISTINCT f.proofID)统计每个文档下不同凭证ID的数量,避免同一凭证被多次统计 - 通过
GROUP BY d.id, d.name, f.path按文档维度分组,确保每个文档对应一条结果 - 移除了不必要的
Proofs表关联,因为需求仅需基于用户上传的Files记录统计凭证数量
内容的提问来源于stack exchange,提问作者Dra
相关产品推荐
相关产品推荐

