MySQL查询含无书籍店铺的COUNT()统计结果问题求助
修正MySQL SQL语句以显示无书籍的店铺
原SQL语句无法显示无书籍的店铺,核心问题在于使用了内连接关联BOOKSHELF表,这会过滤掉没有对应书架记录的店铺。以下是修正后的语句:
SELECT a.id_store, a.name_store, b.name_location AS location, COUNT(d.id_book) AS no_books FROM STORE a JOIN LOCATION b ON a.id_location = b.id_location LEFT JOIN BOOKSHELF c ON a.id_store = c.id_store LEFT JOIN BOOK d ON d.id_bookshelf = c.id_bookshelf GROUP BY a.id_store, a.name_store, b.name_location;
关键修正说明:
- 将
JOIN BOOKSHELF c替换为LEFT JOIN BOOKSHELF c:左连接会保留所有STORE表的记录,即使店铺没有对应的书架,书架相关字段会以NULL填充,不会过滤掉店铺。 - 补充分组字段:在MySQL严格模式下,
SELECT中未使用聚合函数的字段必须出现在GROUP BY中,因此添加a.name_store和b.name_location保证语法合规。 - 保留
COUNT(d.id_book)统计书籍数:左连接下,无书籍时d.id_book为NULL,COUNT()会自动忽略NULL值,最终返回0,符合“无书籍显示0”的需求。
内容的提问来源于stack exchange,提问作者Lina Gonza
相关产品推荐
相关产品推荐

