SQL解决GROUP BY报错的方法_调整SQL_MODE配置
2026/4/6 16:03:46 网站建设 项目流程
MySQL 5.7 因启用 ONLY_FULL_GROUP_BY 模式导致 GROUP BY 报错要求 SELECT 中非聚合字段必须出现在 GROUP BY 中临时可会话级禁用永久需修改配置文件但推荐重写 SQL 用窗口函数或 JOIN 替代。MySQL 5.7 执行 GROUP BY 报错Expression #1 of SELECT list is not in GROUP BY clause这是 MySQL 5.7 默认启用 ONLY_FULL_GROUP_BY SQL 模式后最典型的报错。不是你的 SQL 写错了而是 MySQL 突然“变严格”了——它要求 SELECT 列表里的所有非聚合字段必须明确出现在 GROUP BY 子句中。常见错误现象写了个 SELECT id, name, COUNT(*) FROM user GROUP BY status;直接报错哪怕 id 和 name 在逻辑上由 status 决定比如每个 status 只对应一个 nameMySQL 也不认。这不是 bug是设计行为防止隐式依赖导致结果不可预测临时绕过方法是改 sql_mode但治标不治本长期应重写 SQL改配置只影响当前会话或全局重启后可能失效取决于修改方式临时禁用 ONLY_FULL_GROUP_BY会话级适合开发调试、CI 脚本临时跑通不建议上线使用。执行这条语句即可SET SESSION sql_mode (SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,));仅对当前连接生效断开即恢复原状不用重启 MySQL也不需要管理员权限只要允许 SET注意如果 sql_mode 里有多个模式用逗号分隔REPLACE 可能误删其他模式里的子串比如把 STRICT_TRANS_TABLES 里的 TABLES 干掉更安全的写法是用正则或手动拼接永久关闭 ONLY_FULL_GROUP_BY配置文件修改适用于测试环境或明确接受宽松语义的业务系统但生产库慎用。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询