`
月亮不懂夜的黑
  • 浏览: 156081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql_mode=only_full_group_by引起group by查询报错问题

阅读更多

在Mysql下使用Group by查询的时候会出现如下错误:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'GT_SIGNATURE_STU.SINGN_STU_ID' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

在上述的错误中发现,其有一个sql_mode=only_full_group_by 的问题。通过查找发现该模式对应的列必须有个聚合函数。

 

具体参见: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

关于sql_mode的介绍,参见如下介绍:

MySQL的sql_mode合理设置

sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 
  
sql_mode常用值如下: 
ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中


NO_AUTO_VALUE_ON_ZERO:

该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。


STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:

在严格模式下,不允许日期和月份为零


NO_ZERO_DATE:

设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。


ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL


NO_AUTO_CREATE_USER:

禁止GRANT创建密码为空的用户


NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常


PIPES_AS_CONCAT:

将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似


ANSI_QUOTES:

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

 

0
0
分享到:
评论

相关推荐

    MySql版本问题sql_mode=only_full_group_by的完美解决方案

    MySQL版本问题,特别是关于`sql_mode=only_full_group_by`的设置,是一个常见的困扰开发者的问题。在MySQL中,`sql_mode`是一个变量,它定义了服务器执行SQL语句时遵循的规则集。`ONLY_FULL_GROUP_BY`是其中的一种...

    解决MySQL 5.7.9版本sql_mode=only_full_group_by问题

    在MySQL 5.7.9版本中,引入了一个新的默认SQL模式`ONLY_FULL_GROUP_BY`,这个模式旨在增强SQL查询的严谨性,防止在GROUP BY语句中出现未聚合的列,以避免不确定的结果。然而,这也导致了某些在旧版本中能够正常运行...

    mysql只返回时间的时分秒,并且根据小时分组

    这是新建的一个测试表,同一天,同一时刻的有两条数据 ...set sql_mode = (SELECT REPLACE(@@sql_mode, ‘ONLY_FULL_GROUP_BY’, ‘’)); %y:表示显示两位的年份 %m:表示月份 %d:表示天数 这样就可以了。DATE_FORMAT()

    MySQL5.7中的sql_mode默认值带来的坑及解决方法

    案例一:ONLY_FULL_GROUP_BY 问题描述 MySQL版本从5.6升级至5.7之后,部分SQL执行报错,报错信息如下: ERROR 1055 (42000): Expression #3 of XXXXXX list is not in GROUP BY clause and contain

    mysql不支持group by的解决方法小结

    当`ONLY_FULL_GROUP_BY`启用时,如果你的查询包含未在`GROUP BY`中列出的非聚合列,MySQL会报错,例如错误代码`1055`。这个模式的目的是防止因不确定的行选择导致的不一致结果。在旧版本的MySQL中,可能会返回任意行...

    this is incompatible with sql-mode=only-full-group-by

    this is incompatible with sql-mode=only-full-group-by

    Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错的解决方法

    MySQL 5.7及以上版本引入了一个新的SQL标准模式`ONLY_FULL_GROUP_BY`,该模式旨在增强SQL查询的严格性,确保结果集的合法性。在早期的MySQL版本中,某些GROUP BY查询可以返回不确定的行数据,这在严格模式下是不允许...

    MySQL使用中遇到的问题记录

    本文主要关注的是几个常见的问题及其解决方案,包括因`sql_mode=only_full_group_by`导致的GROUP BY查询错误、清空表数据的方法,以及如何处理MySQL占用过多内存的情况。 首先,`sql_mode=only_full_group_by`是...

    关于MySQL的sql_mode合理设置详解

    sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES' ``` 需要注意的是,MySQL...

    MySQL5.7 group by新特性报错1055的解决办法

    MySQL 5.7引入了一项新的SQL模式,即`ONLY_FULL_GROUP_BY`,这导致了在升级后一些之前正常运行的SQL查询开始报错,错误代码1055。这个模式要求在`GROUP BY`子句中出现的所有列要么在`SELECT`列表中通过聚合函数(如`...

    MySQL关于sql_mode解析与设置讲解

    例如,如果你希望在当前会话中暂时关闭`ONLY_FULL_GROUP_BY`,可以运行`SET SESSION sql_mode = REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');`。 总之,理解和灵活运用`sql_mode`是MySQL管理员和开发者的重要...

    mysql遇到Expression.docx

    这个错误提示表明你的查询违反了`ONLY_FULL_GROUP_BY`的SQL模式,这是MySQL 5.7.5及更高版本默认启用的一种严格模式。 `ONLY_FULL_GROUP_BY`模式的存在是为了确保查询结果的一致性和可预测性。在该模式下,MySQL不...

    MySQL异常:[Err] 1055 – Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nona…

    `sql_mode=only_full_group_by`是MySQL的一种严格模式,它确保了查询结果的可预测性和一致性,避免了因隐式聚合可能引发的不一致数据。在非严格模式下,MySQL可能会选择任意行的数据来代表每个组,而在严格模式下,...

    MySQL数据表合并去重的简单实现方法

    在MySQL中,如果`sql_mode`包含了`ONLY_FULL_GROUP_BY`,则不允许在`SELECT`列表中出现未聚合的列。为了解决这个问题,我们需要修改`sql_mode`: ```sql SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...

Global site tag (gtag.js) - Google Analytics