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

来源:互联网 发布:nginx设置别名 编辑:程序博客网 时间:2024/06/07 02:53

今天使用mysql5.7的时候遇到一个问题,在查询语句后面使用GROUP BY的时候提示SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xxx’的错误,这是因为mysql5.7有一个叫sql_mode的环境变量,其中定义了mysql应该支持的sql语法、数据校验等,这里面有一个属性是only_full_group_by ,在mysql以前的版本里是允许一条select语句中target list中输出的表达式是除聚集函数,group by column以外的表达式,这个表达式的值可能在经过group by操作后变成undefined,无法确定(实际上mysql的表现是分组内第一行对应列的值),而对于语义限制都比较严谨的多家数据库,如SQLServer、Oracle、PostgreSql都不支持select target list中出现语义不明确的列,这样的语句在这些数据库中是会被报错的,所以mysql在后续的版本中出了一个修正语义,就是我们所说的only_full_group_by 语义,所以在出现上面那种错误是,有两种做法:
1.修改sql语句,使其符合only_full_group_by语义
2.在mysql的配置文件(my.cnf)中添加一个配置项sql_mode,将only_full_group_by去掉,例如:
sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

0 0
原创粉丝点击