• MySQL 多表关联一对多查询实现取最新一条数据


    场景:个人用户进行实名认证。一个人存在多个实名认证结果。期望获取到每个人最新一条实名认证结果 加 个人信息。

    一、写出查询用户信息加实名认证得sql

    SELECT
    	* 
    FROM
    	USERS u
    	LEFT JOIN USER_AUTH ua ON ua.userId = u.id 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二、改造sql 可以获取到最新一条实名记录

    方法一:

    1、大致思路进行 left join得这张表提前 先分组筛选出 最新一条记录 。

    SELECT
    	* 
    FROM
    	USERS u
    	LEFT JOIN ( SELECT MAX( id ) AS id, userId FROM USER_AUTH GROUP BY userId ) AS ua ON ua.userId = u.id
    
    • 1
    • 2
    • 3
    • 4
    • 5

    方法二:

    先联表后,然后取出出第一个

    SELECT
    	* 
    FROM
    	(
    	SELECT
    		u.id,
    		row_number() over ( PARTITION BY u.id ORDER BY u.id ) AS rowno 
    	FROM
    		USERS u
    		LEFT JOIN USER_AUTH ua ON u.id = ua.userId
    	) tmp 
    WHERE
    	rowno = 1;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    方法三:

    SELECT
    		u.id
    	FROM
    		USERS u
    		LEFT JOIN USER_AUTH ua ON ua.id = (SELECT b.id FROM USER_AUTH b WHERE b.userId = u.id HAVING 1 ORDER BY b.id )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sql server 需要缓存下面写法

    区别在于 子查询得order by 需要 使用 top

    SELECT
    		u.id
    	FROM
    		USERS u
    		LEFT JOIN USER_AUTH ua ON ua.id = (SELECT top 1 b.id FROM USER_AUTH b WHERE b.userId = u.id ORDER BY b.id )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    DataGrip 上诉方法 mysql 运行结果:

    Navicat Premium 15 mysql 执行结果

    Navicat Premium 15 SQL server 执行结果

    emmmmm

    sql 多次执行发现时间 都不稳定。 综合下来 方法一 得效率更好

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    pb:10个用一条语句写成的有关日期函数
    KF-GINS 和 OB-GINS 的 Earth类 和 Rotation 类
    JUC - 线程基础
    Python问题1:ModuleNotFoundError: No module named ‘numpy‘
    【JY】YJK前处理参数详解及常见问题分析:控制信息(二)
    实现Promise的原型方法--前端面试能力提升
    【考研英语语法】写作中的复杂名词短语
    IIC 通信协议 (一)
    mysql5.7获取json数组中的某个对象
    【Hive】内部表(Managed Table)和外部表(External Table)相关知识点
  • 原文地址:https://blog.csdn.net/m0_54866636/article/details/126113121