如何关联查询Pets、Owners、Stores三张表统计各门店对应的宠物总数
可以实现该查询需求,不需要使用UNION,核心用LEFT JOIN保留全部门店记录、修正关联条件即可,正确SQL如下:
SELECT s.storename, COUNT(p.id) AS `Total Pets` FROM Stores s LEFT JOIN Owners o ON s.id = o.store LEFT JOIN Pets p ON o.id = p.owner GROUP BY s.id, s.storename
你之前的写法存在三个核心问题:
- 关联类型选择错误:使用INNER JOIN做关联会自动过滤没有对应店主、没有对应宠物的门店,因此无法得到宠物数量为0的Corner门店记录,替换为LEFT JOIN即可保留所有门店数据
- 关联逻辑错误:Stores表和Owners表的关联字段是
Stores.id = Owners.store,而非Stores.id = Owners.id;Pets表和Owners表的关联字段是Pets.owner = Owners.id,你之前直接把Pets和Stores做关联,关联链错误导致统计结果不符合预期 - 统计逻辑错误:统计宠物总数直接统计Pets表的主键id即可,COUNT函数会自动忽略NULL值,没有对应宠物的门店会自动返回0,无需多余的DISTINCT嵌套逻辑
如果你当前运行结果和你给出的示例结果数值不符,是因为你提供的示例表仅为部分截取数据,上述SQL逻辑完全匹配需求,替换到真实全量数据中即可得到预期结果。
内容的提问来源于stack exchange,提问作者Jefferson Rosa
相关产品推荐
相关产品推荐

