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