mysql查询中group by语句中出现sql_mode=only_full_group_by

mysql文档中的说明 https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html 。

  ONLY_FULL_GROUP_BY

       对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY子句的列,没有在GROUP BY中出现,那么这个SQL是不合法的。是可以理解的,因为不在 group by 的列查出来展示会有矛盾。

        表:user,正常查询应该是三个,加上group by 后,就会变成不确定要查询出哪个,mysql也不知道到底给你返回A 还是B 。如果sql_mode中有ONLY_FULL_GROUP_BY就会报错,所以这个还是要好好的检查一下你的sql是否存在逻辑问题。

               解决的办法可以执行sql:SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 这种方式的在mysql重启后还是会有问题,建议修改mysql下my.cnf文件(linux:/etc/my.cnf;windows:mysql-*/my.ini),找到#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个注释掉,改成下面的
   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查询中group by语句中出现sql_mode=only_full_group_by_第1张图片            mysql查询中group by语句中出现sql_mode=only_full_group_by_第2张图片

          


你可能感兴趣的:(java)