一对多关联查询, 只关联最新的记录

业务场景:

        用户填写申请信息,然后进行审核, 审核有通过、拒绝、退回。每次审核都要记录审核结果和处理意见。

业务需求:

       现需要查询申请记录,可根据审核状态来过滤筛选。

业务分析:

       申请信息审核通过或拒绝之后流程结束,若退回,则需要重新修改申请信息并再次提交审核,这就存在一个 提交->退回->提交->...->退回的循环,每次退回都会产生一个审核记录,所以申请信息和审核信息是1对多的关系。

       查询的时候只关注审核记录的最新一条审核信息,其他的只作为历史存档用,无需关注。

表设计:      

申请表: apply_info
列名类型备注
info_idvarcharid
infovarchar申请信息
statusint申请状态
审核记录表: audit_log
 列名类型备注
log_idvarchar记录id
info_idvarchar关联的申请表id
resultint审核结果
status_beforeint审核前状态
status_afterint审核后状态
audit_timedatetime审核时间

 查询sql:

SELECT *
FROM apply_info ai
LEFT JOIN audit_log al
ON ai.info_id = al.info_id;

        该查询结果会出现重复的申请信息, 但对应不同审核记录的结果,所以需要对以上sql进行改造

SELECT *
FROM apply_info ai
LEFT JOIN audit_log al
ON al.log_id = (
    SELECT al_in.log_id
    FROM audit_log al_in
    WHERE al_in.info_id = ai.info_id
    ORDER BY al_in.audit_time DESC
    LIMIT 1
);

       此处使用mysql的写法形式,省去了where条件的写法。

       在内关联查询中只获取申请记录对应的最新一条审核信息,最终获得一条申请信息和其对应的一个审核记录的关联结果,完成目标。

 

      以上若存在错误请各位看官指出,若有更好的实现方法,还请不吝赐教。

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值