惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
WordPress大学
WordPress大学
博客园 - 叶小钗
B
Blog RSS Feed
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
B
Blog
V
V2EX
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
PCI Perspectives
PCI Perspectives
雷峰网
雷峰网
The Register - Security
The Register - Security
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
Security Latest
Security Latest
NISL@THU
NISL@THU
腾讯CDC
S
SegmentFault 最新的问题
小众软件
小众软件
The GitHub Blog
The GitHub Blog
月光博客
月光博客
A
Arctic Wolf
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
IT之家
IT之家
D
DataBreaches.Net
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
TaoSecurity Blog
TaoSecurity Blog
P
Privacy International News Feed

沉迷在 - Java.li - 无法自拔

Spring Boot启动报错 Failed to configure a DataSource 解决办法 Maven依赖冲突怎么排查?dependency:tree、exclusions与版本统一完整教程 - 沉迷在 - Java.li - 无法自拔 给网站加一条会动的人群横幅:Little People 动画组件 Demo - 沉迷在 - Java.li - 无法自拔 【soso.re】聚合热榜 | CloudflareWorkers部分接口失效的排查与代理方案 - 沉迷在 - Java.li - 无法自拔 Spring Boot 2升级到Spring Boot 3完整指南:JDK17、javax迁移jakarta、依赖兼容与常见报错 - 沉迷在 - Java.li - 无法自拔 随机小姐姐视频 - 沉迷在 - Java.li - 无法自拔 Spring Boot与JDK版本兼容表:Spring Boot 2.x / 3.x / 4.x应该用哪个Java版本? - 沉迷在 - Java.li - 无法自拔 No compiler is provided in this environment解决办法:JDK、JRE、Maven与IDEA排查 - 沉迷在 - Java.li - 无法自拔 置身钉内|含全文 PDF - 沉迷在 - Java.li - 无法自拔 javac不是内部或外部命令怎么解决?JDK、JAVA_HOME和Path完整排查 Windows配置JAVA_HOME后不生效怎么办?java -version显示旧版本解决办法 Maven Could not transfer artifact 下载失败解决:settings.xml、国内镜像、本地缓存与代理排查 JSON转Java实体类完整教程:对象、数组、嵌套结构与LocalDateTime处理 Windows安装JDK 8 / 17 / 21 / 25完整教程:JAVA_HOME环境变量配置与验证 IDEA下载JDK很慢怎么办?手动配置本地JDK完整教程 Java版本号与class文件major version对照表:Unsupported class file major version 52 / 55 / 61 / 65 / 69 / 70 Gradle国内镜像配置教程:init.gradle、repositories与Wrapper加速完整指南 Maven国内镜像settings.xml配置大全:阿里云、腾讯云、华为云、清华源 Java开发者必备工具箱 2026年Java行情深度解读:就业真实现状、语言排名与开发者破局指南 如何防止服务器被暴力破解?2026年最全的5层防护实战指南 Go-RSS-Hub:我用 Go 搭了一个可扩展的 RSS 聚合服务 Vibe Coding 实战复盘 2026年全球十大顶级大语言模型横向对比报告 万能插座与十八般兵器:MCP 和 Skill 记一次处理服务器被暴力破解(含黑名单IP) Vibe Coding:一名“古法程序员”的使用反思与未来思考 .li后缀续费的特殊性(某些顶级域名在到期前可能被提前删除) 浅谈域名后缀以及市场前景 咖啡与编程 超越基础的编程智慧
解决MySQL ONLY_FULL_GROUP_BY 模式导致的 SQL 语法错误
HiF · 2026-03-11 · via 沉迷在 - Java.li - 无法自拔

报错信息

### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''xxx.d.brand_id'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这是一个典型的 MySQL ONLY_FULL_GROUP_BY 模式导致的 SQL 语法错误。

原因分析

SQL 语句中使用了 GROUP BY d.source_detail_id,但是在 SELECT 列表中包含了其他非聚合列(如 d.brand_id, d.brand_name, d.unit_id 等),而这些列并没有出现在 GROUP BY 子句中。
在 MySQL 5.7+ 版本中,默认开启了 sql_mode=ONLY_FULL_GROUP_BY。该模式要求:SELECT 列表中的每一列,要么必须包含在 GROUP BY 子句中,要么必须使用聚合函数(如 SUM, MAX, MIN, ANY_VALUE 等)进行包裹。
数据库认为,如果你只按 source_detail_id 分组,那么对于同一个 source_detail_id,如果存在多行数据且它们的 brand_id 不同,数据库就无法确定应该返回哪一行的 brand_id,因此报错。

解决办法

  1. 修改 SQL,将所有非聚合字段加入 GROUP BY;
  2. 使用 ANY_VALUE() 函数包裹非聚合列(快速修复,无需改 GROUP BY);
    如果你确定同一个 source_detail_id 下这些属性值是唯一的,或者你不在乎取哪一行的值,可以使用 MySQL 的 ANY_VALUE() 函数。这告诉数据库:“随便取一个值给我,不要报错”。
  3. 关闭 ONLY_FULL_GROUP_BY 模式;
    # 临时生效
    SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    # 永久生效
    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    
    我使用的是云数据库,操作步骤是在云控制台,找到数据库实例,点击操作,选择修改参数,在参数列表中搜索 sql_mode,将 ONLY_FULL_GROUP_BY 改为空,提交参数后立即生效。

重要提示

虽然关闭 ONLY_FULL_GROUP_BY 可以快速解决你的报错,但请务必注意以下几点:

  1. 数据不确定性风险:
    关闭该模式后,MySQL 允许 SELECT 列表中出现在 GROUP BY 之外的非聚合列。如果这些列在分组后有多不同的值,MySQL 会随机返回其中一行的值。
  2. 主从同步/集群问题:
    如果你的架构包含只读实例(Read-only instances)或集群,确保所有节点的 sql_mode 配置一致,否则可能导致主从同步错误或查询结果不一致。