添加GROUP BY后SQL无数据返回且无报错,求排查原因
问题原因及解决办法
核心问题1:SELECT * 与 GROUP BY 的语法冲突
多数数据库(如开启ONLY_FULL_GROUP_BY的MySQL、PostgreSQL等)不允许GROUP BY子句搭配SELECT *使用。因为GROUP BY会将数据按指定字段分组,而SELECT *包含了未被纳入分组的非聚合列(比如p.powerRank、p.power等)。即便你的数据库未报错,这种写法也会导致查询逻辑异常,甚至返回空结果。
核心问题2:分组逻辑不符合需求
你提到要“按主标题分组”,但实际用了GROUP BY d.ID——如果d.ID是vtm5eDisciplines表的主键,每个分组只会包含一行主表数据,和你想要的“按主标题聚合”逻辑完全不符,反而会让数据库无法正确处理关联的异能表数据。
正确写法示例
如果你的需求是将同一个主标题(d.discipline)下的所有异能聚合展示,比如用逗号分隔异能名称,可以这样写:
SELECT d.ID, d.discipline, -- 聚合异能列,按等级排序后合并 GROUP_CONCAT(p.power ORDER BY p.powerRank SEPARATOR ', ') AS powers, d.vampID FROM vtm5eDisciplines d LEFT JOIN vtm5eDisciplinePowers p ON d.ID = p.disciplineID WHERE d.vampID = $vampID GROUP BY d.ID, d.discipline, d.vampID -- 所有非聚合的主表字段都需加入GROUP BY ORDER BY d.discipline
如果只需按主标题分组(忽略d.ID的差异),则调整GROUP BY为:
GROUP BY d.discipline, d.vampID
为何加GROUP BY后无数据
当SELECT *搭配GROUP BY d.ID时,数据库无法确定每组中要返回异能表的哪一行数据,在宽松模式下可能默认返回NULL值;若所有分组对应的异能数据都为NULL,或数据库内部处理逻辑异常,就会出现无数据返回的情况。
内容的提问来源于stack exchange,提问作者Trev
相关产品推荐
相关产品推荐

