MySQL5.7 group by报错1055
来源:互联网 发布:日剧 喜剧 知乎 编辑:程序博客网 时间:2024/03/28 22:47
项目中本来使用的是mysql5.6进行开发,切换到5.7之后,突然发现原来的一些sql运行都报错,错误编码1055,
语法如下
SELECT DISTINCT a.attr_one, a.attr_two, a.attr_three, b.attr_four FROM table_one aLEFT JOIN table_two b ON b.some_idx = a.idxORDER BY b.id_order
在大多数情况下,DISTINCT子句可以被认为是GROUP BY的特殊情况。例如,
ONLY_FULL_GROUP_BY
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的描述)
如果ONLY_FULL_GROUP_BY被禁用,则使用GROUP BY的标准SQL的MySQL扩展允许选择列表,HAVING条件或ORDER BY列表引用非集合列,即使这些列在功能上不依赖于GROUP BY列。这将导致MySQL接受前面的查询。在这种情况下,服务器可以自由选择每个组中的任何值,因此除非它们是相同的,所选择的值是不确定的,这可能不是您想要的。此外,通过添加ORDER BY子句不会影响来自每个组的值的选择。结果集排序发生在选择值后,ORDER BY不影响服务器选择的每个组中的哪个值。禁用ONLY_FULL_GROUP_BY主要是因为您知道,由于数据的某些属性,
更多http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_only_full_group_by
不想修改 ONLY_FULL_GROUP_BY又能继续使用的方法 可以将MySQL修改如下
SELECT DISTINCT attr_one, attr_two, attr_three, attr_fourFROM (SELECT a.attr_one, a.attr_two, a.attr_three, b.attr_four FROM table_one a LEFT JOIN table_two b ON b.some_idx = a.idx ORDER BY b.id_order) tmp
错误信息和sql_mode中的“only_full_group_by“有关,到网上看了原因,说是mysql5.7中only_full_group_by这个模式是默认开启的
查看sql_mode用如下语句
SELECT @@sql_mode
小心使用
mysql > SET sql_mode = ''
这实际上清除了当前启用的所有模式。如果你不想混淆其他设置
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
只将一个模式添加到sql_mode而不删除现有模式:
SET sql_mode=(SELECT CONCAT(@@sql_mode,',<mode_to_add>'));
仅从sql_mode中删除特定模式而不删除其他模式:
SET sql_mode=(SELECT REPLACE(@@sql_mode,'<mode_to_remove>',''));在目前的情况下,如果要仅删除
ONLY_FULL_GROUP_BY
模式,请使用以下命令:mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
参考文章地址
https://stackoverflow.com/questions/23921117/disable-only-full-group-by
http://johnemb.blogspot.com/2014/09/adding-or-removing-individual-sql-modes.html
- MySQL5.7 group by,报错1055
- MySQL5.7 group by报错1055
- MySQL5.7 group by新特性,报错1055
- MySQL5.7 group by新特性,报错1055
- MySQL5.7 group by新特性,报错1055
- MySQL5.7 group by新特性,报错1055
- MySQL5.7 group by新特性,报错1055
- 关于mysql5.7 [Err] 1055 group by
- mysql5.7执行sql语句报错:In aggregated query without GROUP BY, expression #1 of SELECT list contains nonagg
- MySQL5.7排序后GROUP BY
- mysql5.7中group by限制
- oracle报错:不是GROUP BY 表达式
- mysql 查询group by 报错
- Ubuntu16.04里mysql5.7运行GROUP BY语句出现ERROR(1055):42000
- mysql5.7group by异常引发的思考
- ubuntu快速安装mysql5.7以及group by 问题
- hive报错 ParseException line 10:7 missing EOF at 'by' near 'group'
- 关于Oracle报错ORA-00979不是GROUP BY表达式
- 程序员必须知道的10大基础实用算法
- Activiti 数据库表结构
- 图解HTTP(三)
- IEnumerable与IEnumerator区别
- arcgis for iOS10.2.5 根据坐标节点添加线
- MySQL5.7 group by报错1055
- 【微观】一般均衡
- Spark + kafka集群基本操作
- 类的成员指针
- 使用wsimport命令生成webService客户端代码实例
- 依赖倒转原则
- Jira平台数据自动化获取(一)--Jira接口请求
- SpringMVC处理静态资源异常
- java 虚拟机系列文章1--初识JVM