• 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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    【数据架构】数据网格与 Data Fabric:了解差异
    SQLServer统计监控SQL执行计划突变的方法
    Linux中三次握手,四次挥手状态图,端口复用 半关闭状态,心跳包
    LabVIEW将 VI 升级到较新的版本和恢复为先前版本
    高端手机市场的诸神之战,vivo举起一把“雷神之锤”
    BootStrap前端框架的时候
    MYSQL 基本操作 (3)
    Redis 过期淘汰机制
    【路径规划】(3) RRT 算法求解最短路,附python完整代码
    基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持部门经理的审批
  • 原文地址:https://blog.csdn.net/m0_54866636/article/details/126113121