问题现象
在执行MySQL命令进行查询时,提示如下错误:
1055(42000): SELECT list is not in GROUP BY clause and contains nonaggregated column
可能原因
该报错可能由以下两种原因引入:
- 原因一:
用户修改了sql_mode参数,加上了ONLY_FULL_GROUP_BY条件,导致GROUP BY的语法不符合规范。
- 原因二:
业务侧使用的驱动程序修改了sql_mode参数值。例如,业务侧使用的ADO.NET驱动程序修改了sql_mode参数值,导致GROUP BY报错。
如上图所示,当执行的INSERT语句需要返回自增列的值时,驱动程序会在执行INSERT语句前,自动修改当前会话上的sql_mode参数值,并且不会在INSERT语句执行完之后将sql_mode恢复为原参数值。如果当前会话被继续使用,会导致后续执行包含GROUP BY的SELECT语句时出现报错。
解决方案
根据可能原因对应以下两种解决方案:
- 方案一:在RDS控制台的参数设置页面,修改sql_mode参数取值,去掉ONLY_FULL_GROUP_BY条件,忽略GROUP BY的严格检查。修改方法,请参见设置实例参数。
- 方案二:如果使用了ADO.NET驱动程序,需要用户在业务侧执行INSERT语句之后,执行查询之前,在业务侧代码中,增加修改sql_mode参数的语句,将sql_mode参数修改为默认值。
命令示例如下:
SET session sql_mode = default;
文档内容是否对您有帮助?