场景
查询 最大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匹配。