MyBatis项目中使用GROUP BY分组查询出现异常的原因分析和修复记录

简介: 本篇文章记录了在MyBatis项目中使用SQL中的分组查询GROUP BY语句,查询多个字段时数据查询报错的问题。分析了导致GROUP BY查询语句报错的原因并提出解决这样问题的方法。通过对这样问题的解决记录,可以帮助大家在使用MyBatis中的GROUP BY查询时避免出现一些问题。

报错内容

SELECT list is not in GROUP BY clause and contains nonaggregated column...

错误原因

  • MySQL5.7.5only_full_group_by成为sql_mode的默认选项之一,导致一些sql语句失效,比如group by进行分组查询

查看sql_mode配置

  • 在命令行输入命令查看sql_model配置:
select @@sql_mode;
  • 如果查询结果有ONLY_FULL_GROUP_BY, 即为报错的原因

解决方案

  • 打开MySQL安装目录下的my.ini文件,如果没有就创建,在文件的末尾添加:
sql_mode = STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
  • 保存后重启MySQL

错误分析

  • only_full_group_by: 确保group by查询是条件有且只有唯一确定的字段

    • 上述报错的原因在于select字段里包含了没有被group by条件唯一确定的字段fields
  • 示例:
name country
张明 魏国
柳阳 魏国
李峰 蜀国
张一铭 蜀国
  • 查询有多少国家:
select country from 表名 group by country;

这样的查询没有问题

  • 如果这样查询:
select name,country from 表名 group by country;

因为执行group by语句实际上将同一组内多行纪录合并成一行, 同一个国家name并不相同,搜索引擎不知道该返回哪一条,违背了ONLY_FULL_GROUP_BY原则报错

  • 因此在非必要还是不要去掉ONLY_FULL_GROUP_BY,错误是SQL语句本身存在问题
相关文章
|
3月前
|
SQL XML Java
MyBatis Mapper中使用limit参数的查询问题
总结而言,MyBatis中使用 `limit`参数的查询可以高度定制并且灵活,基于方法签名和XML映射文件的组合来达成多样化的查询需求。通过参数化查询和动态SQL,MyBatis可以有效地处理各种复杂情境下的数据库操作,并且将SQL语句的维护与业务代码的编写相分离,提升代码的可维护性和可阅读性。
332 13
|
4月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
167 1
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
901 9
|
9月前
|
XML Java 数据库连接
Mybatis一对一,一对多关联查询
## MyBatis一对一、一对多关联查询详解 MyBatis是一款优秀的持久层框架,提供了灵活的SQL映射功能,支持复杂的数据库操作。本文将详细介绍MyBatis中一对一和一对多关联查询的实现。 ### 一对一关联查询 一对一关联关系指的是一个表中的一条记录与另一个表中的一条记录相关联。例如,一个用户有一个地址信息。 #### 数据库表设计 假设有两个表:`user`和 `address`。 ``` CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE address
217 18
|
9月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
863 6
|
9月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
1113 1
|
10月前
|
XML Java 数据库连接
Mybatis实现RBAC权限模型查询
通过对RBAC权限模型的理解和MyBatis的灵活使用,我们可以高效地实现复杂的权限管理功能,为应用程序的安全性和可维护性提供有力支持。
247 5
|
11月前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
264 2
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
10月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
380 3
|
12月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
2529 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个