当前位置: 首页 > news >正文

解决 MySQL 的 sql_mode 中包含 only_full_group_by模式导致group by SQL报错

  • sql 报错:
    Cause: java.sql.SQLSyntaxErrorException: Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ev_data_transmission.p.push_type' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ev_data_transmission.p.push_type' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
  • 解释:这个错误是由于 MySQL 的 sql_mode 中包含 only_full_group_by 模式导致的。在 only_full_group_by 模式下,SELECT 列表中的非聚合列必须出现在 GROUP BY 子句中,或者该非聚合列必须是 GROUP BY 列的函数依赖。
    当前的 SQL 查询中,SELECT 列表里有一些非聚合列没有出现在 GROUP BY 子句中,比如 p.push_type、p.push_mode 等,这就违反了 only_full_group_by 模式的规则。
  • 解决方案
    1. 方法一:把非聚合列添加到 GROUP BY 子句中,就是将select中的查询参数全部放入 group by当中 。

    2. 方法二:关闭 only_full_group_by 模式

      • 可以选择关闭 only_full_group_by 模式,但这种做法不推荐,因为 only_full_group_by 模式有助于保证查询结果的准确性。
        你可以通过以下 SQL 语句临时关闭该模式:
        SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
      • 永久关闭该模式,需要修改 MySQL 的配置文件(通常是 my.cnf 或者 my.ini),在 [mysqld] 部分添加或者修改 sql_mode 配置:
        [mysqld]
        sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE"
      • 重启mysql sudo systemctl restart mysqld
    3. 验证 sql_mode 是否生效:

      SELECT @@sql_mode;
      

      如果输出中不再包含 ONLY_FULL_GROUP_BY,则修改成功。

相关文章:

  • PHP eval 长度限制绕过与 Webshell 获取
  • 穿透Session 0隔离
  • 【每日算法】Day 6-1:哈希表从入门到实战——高频算法题(C++实现)
  • 网络安全基础:五类安全服务、八种安全机制与OSI七层模型的全面解析
  • HTML——什么是块级元素,什么是内联元素,有何区别
  • 使用Django创建项目及介绍
  • OBS虚拟背景深度解析:无需绿幕也能打造专业教学视频(附插件对比)
  • 小蓝的括号串(栈,dfs)
  • 电气、电子信息与通信工程的探索与应用
  • Python正则表达式(一)
  • 远程登录服务(ssh)
  • unordered_map
  • 直播预告 | TDgpt 智能体发布 时序数据库 TDengine 3.3.6 发布会即将开启
  • 如何设计系统扩展性以应对业务增长
  • 《引流获客》总结
  • 同济大学多层次具身导航策略!​FlexVLN:灵活适应多样化任务的视觉语言导航
  • ubuntu下切换GCC版本
  • django入门教程之cookie和session【六】
  • Spring AI Alibaba AudioModel使用
  • Linux的进程信号 -- 信号产生,信号保存,信号捕捉,硬件中断,内核态和用户态,可重入函数,volatile,SIGCHLD
  • 网站宣传软文/推广营销大的公司
  • 像美团这种网站怎么做/产品seo是什么意思
  • 徐州做网站最好的公司/网络推广外包费用
  • wordpress+小米/网站seo思路
  • 关于政府网站建设的研究报告/东莞全网营销推广
  • wordpress 登录模块/工具站seo