异常图片
异常sql语句:
select b.label_id,a.label_name,count(a.label_name) as count from quick_poll_label as a
left join quick_poll_alerts_label as b on a.id = b.label_id group by a.label_name;
异常说明:
解释一:
对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by 的数据库,在使用group by时就会报错。
解释二:
使用这个就是使用和oracle一样的group 规则, select的列都要在group中,或者本身是聚合列(SUM,AVG,MAX,MIN) 才行,其实这个配置目前个人感觉和distinct差不多的,所以去掉就好。
官方解释:
MySQL 5.7.5及更高版本实现了对功能依赖性的检测。如果ONLY_FULL_GROUP_BY
启用了 SQL模式(默认情况下为SQL模式),则MySQL拒绝查询,其中选择列表,HAVING
条件或 ORDER BY
列表引用的是GROUP BY
未在子句中命名且在功能上不依赖于它们的未聚合的列。(在5.7.5之前,MySQL不会检测功能依赖关系,并且 ONLY_FULL_GROUP_BY
默认情况下未启用。
相关链接
修改方式:
永久性修改在配置文件中修改
windows系统在my.ini中修改,配置文件位置在服务中查看
image.png修改-->
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
linux系统在etc/my.cnf中
在文件的最后加上
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
不区分系统
、不修改配置
,在没有参与group by的情况下,在字段上使用any_value(字段)函数,即可。
select any_value(a.id),a.label_name,count(a.label_name) as count from quick_poll_label as a left join quick_poll_alerts_label as b on a.id = b.label_id group by a.label_name;
网友评论