Mysql ONLY_FULL_GROUP_BY
MySql在低版本(5.7.x以下)中允许select后面的非聚合列不出现在group by中。以下sql在低版本中是可以运行的,但是在5.7及以上版本会报错
SQL
1 |
|
报错
1 |
|
解决方法
可以通过三种方式解决报错问题
修改sql使其遵守only_full_group_by规则
1
2
3
4
5-- 1 去掉不在group by 中的非聚合列
select parent_view,count(*) from c_view group by parent_view;
-- 2 使用any_value
-- any_value()会选择被分到同一组的数据里第一条数据的指定列值作为返回数据
select any_value(view_id),parent_view,count(*) from c_view group by parent_view;将MySql的版本降到5.7以下
关闭only_full_group_by规则
查询当前状态
1
2select @@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修改my.cnf
1
2[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
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!