含GROUP_CONCAT的SELECT查询未返回全部条目仅得1行问题咨询
SQL查询结果不符合预期问题排查
问题根因
你的查询存在逻辑错误,核心问题是聚合函数未搭配对应分组规则。
原查询代码如下:
SELECT s.id space_id ,s.name space_name ,i.name item_name ,GROUP_CONCAT(DISTINCT a.category) attribute_names FROM spaces s INNER JOIN spaceItemAssociations sia ON sia.space_id = s.id INNER JOIN items i ON i.id = sia.item_id INNER JOIN itemAssociations ia ON ia.items_id = i.id INNER JOIN itemAttributes a ON ia.itemAttributes_id = a.id WHERE s.id = 1
GROUP_CONCAT属于SQL聚合函数,当你没有显式声明GROUP BY子句时,数据库会默认将所有满足WHERE过滤条件的结果合并为唯一一行聚合结果,自然只会返回1条数据,而非你预期的按每个对象拆分的结果。
修正方案
你需要按非聚合的维度字段分组,也就是按空间、对象的唯一标识分组即可:
SELECT s.id space_id ,s.name space_name ,i.name item_name ,GROUP_CONCAT(DISTINCT a.category) attribute_names FROM spaces s INNER JOIN spaceItemAssociations sia ON sia.space_id = s.id INNER JOIN items i ON i.id = sia.item_id INNER JOIN itemAssociations ia ON ia.items_id = i.id INNER JOIN itemAttributes a ON ia.itemAttributes_id = a.id WHERE s.id = 1 GROUP BY s.id, s.name, i.id, i.name
分组后数据库会把同一个item的所有属性聚合为一行,最终返回4行结果对应空间下的4个对象,符合你的预期。
内容的提问来源于stack exchange,提问作者user16045732
相关产品推荐
相关产品推荐

