mysql group by的坑

47 篇文章 0 订阅
16 篇文章 0 订阅

场景

查询 最大version的数据
id,version,tenant为联合主键

错误查询

select  max(version) version, id, tenant,type, name, format, default_value, multi_line, max_length, min_length, formula  
from imcs_field_string_definitions  
where 1=1  and tenant = 1212  group by id 

错误结果

在这里插入图片描述
id=11,对应有三条数据,红框中的字段是从三条数据中随机取的,和version不匹配。

原因

分组查询字段:适用于聚合函数,处理分组后的多条字段,如果获取非聚合的单个字段,是随机的。

参考
https://www.cnblogs.com/lyb0103/p/9554688.html

正确方法

子查询:锁定需要数据的主键

select a.version, a.id, a.tenant,a.type, a.name, a.format, a.default_value, a.multi_line, a.max_length, a.min_length, a.formula
from imcs_field_string_definitions a,(select max(version) version, id, tenant from imcs_field_string_definitions group by id) b 
where a.version = b.version and a.id = b.id and a.tenant = b.tenant and a.tenant = 1212

正确结果

在这里插入图片描述
红框中的数据和version匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值