MySQL 关联表取最新一条记录方案

  1. 初始方案一,先排序再分组
    select id,name,handle_time from A inner join (select id,handle_time from B order by handle_time desc) tmp on A.id=tmp.id group by id
    这是网上找的解决方案,先排序好,再进行分组,但是结果却不可行。经实践测试发现,子查询是排序了,但是进行 inner join 再 group by,handle_time 还是取的分组里的最小值。
  2. 方案二,取最大时间值进行分组
    select id,name,handle_time from A inner join (select id,max(handle_time) as handle_time from B group by id) tmp on A.id=tmp.id order by handle_time desc
    测试证明这个方案是可行的,通过网上找资料发现 mysql5.7 之前方案一是可行的,到 mysql5.7 后只能使用方案二了。

试问有更好的方案吗?

本作品采用《CC 协议》,转载必须注明作者和本文链接
雪花飘
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

连什么表, 查2次不香么

explain 依次看, 谁的时间短, 谁查的条数少

3年前 评论

@abcDev 主要是两个表都有搜索过滤条件,而且要进行分页,分两次查不好过滤分页

3年前 评论

擦,现在才发现方案二是有行不通的,只是把最大的时间取出来,其他数据还是默认第一个的

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!