MySQL发生[Err] 1055的解决方案
在使用group by时,如果group by后面的字段和所要查询的字段不完全一样时会报如下错误
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
此时有两种解决方案
方案一:临时修改(服务器重启后会失效)
-- 通过该语句查询这个值 --
select @@sql_mode;
会得到如下结果:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
再执行下述语句,引号里的内容是上述结果剔除ONLY_FULL_GROUP_BY后余下的内容
set @@sql_mode= "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
方案二:修改mysql配置文件(服务器重启后生效)
在my.cnf文件中的[mysqld]的下面加上下列语句
sql_mode=“STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”;
一般不建议将ONLY_FULL_GROUP_BY关闭,因为这个符合SQL标准
也可以使用MySQL中的一个函数 any_value(field),括号中是一个字段,可以使得括号中的字段既能被查询出来又可以不出现在group by语句中