mysql5.7 sql_mode=only_full_group_by研读

在安装了MySQL5.7后,笔者发现,以前系统的一些sql语句报错了,报的错如下:

bad SQL grammar []; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ws2.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 



意思就是说,当前的sql语句中,有一些是和only_full_group_by 的sql_mode不兼容的。


这个错误的意思是说,分组后,一些分组有多条记录,不知道一个分组该显示哪一个值。

我们先来看一看有这样的一个表。

表的字段很简单。

order_id(订单id),order_type_id(订单类型id),store_name(店铺名称)

数据是这样的

BN20150930233929591     999 地下室坡道照明系统改造

BN20150702170226129    101   世博会议中心

 BN201512271300122162  101  暂无

我们这么写sql

select store_name from `order` group by order_type_id ;

就会报刚才那个错.


原因是这样子的。以订单类型分组。发现订单类型id为101的那一组有两个数据,也就是两个店名   世博会议中心和暂无。

数据库不知道分组后该显示哪一个,所以就报错了。

知道原因找解决的方法就很容易了。


我们使用一个any_value()函数。

意思是说,分组里的哪个数据都行。

select any_value(store_name) from `order` group by order_type_id ;

还有一个就是在配置文件中my.cnf关闭sql_mode=ONLY_FULL_GROUP_BY。

这样就解决了问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值