首页 > 技术文章 > 有效解决mysql中ONLY_FULL_GROUP_BY办法---1055

honour1207 2022-04-22 12:08 原文

一. (推荐)any_value

  mysql用来应对 ONLY_FULL_GROUP_BY 所出现的 any_value()

  1. mysql 5.7 以后 基本都会自带 ONLY_FULL_GROUP_BY ,很可能在部署以后,会出现 1055的错误

  2. ONLY_FULL_GROUP_BY 意思就是 select target list 中有明确的语义,在5.7之前不存在是允许模糊语义查询的。但是5.7以后,需要明确你所查询的所有数据,允许有聚合函数,不允许存在group by 后所不带字段

  3. 故而Mysql提供了 any_value() 来拒绝 ONLY_FULL_GROUP_BY 

  4. 需注意一点 any_value() 所取得是group by同一组数据中的第一条数据信息

  

  ① 规范形式, 简单到不能再简单,没有任何问题

  

 

 

  ② group by 之外的字段加入 select 之后, 发现报错,1055 不兼容

 

 

  

 

  ③ 加入 any_value 来拒绝 ONLU_FULL_GROUP_BY的规范

 

 

   

  

  ④ 变换成聚合函数也是不存在问题的

 

 

   

 

 

   

  注意

      只要不是group by之后的字段,那么不管是放select之后还是 order by 之后 都会产生问题, 但是注意 where 就不会产生问题

      

      

 

 

 

二. (半推荐) 套sql

  既然 ONLY_FULL_GROUP_BY 不允许存在group by 后面以外的字段显示, 那么就将 group by 按照需要字段套进去然后进行where,获取到需要的数据

    一般来说,不符合部分场景

 

  

 

 

 

三. (极度不推荐)更改mysql中的 sql_mode

  这种方法纯属扯淡,但是作为了解还是比较可以的。  毕竟作为公司开发,去更改数据库的sql_mode 然后重启,简直是吃饱了撑的。当天就下岗,

  数据库命令行输入 select @@sql_mode 就能看到所有的规则,找mysql的配置文件打开就能看到。

  

  

推荐阅读