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

业务场景:

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

业务需求:

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

业务分析:

申请信息审核通过或拒绝之后流程结束,若退回,则需要重新修改申请信息并再次提交审核,这就存在一个 提交->退回->提交->...->退回的循环,每次退回都会产生一个审核记录,所以申请信息和审核信息是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条件的写法。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值