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

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

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

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

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

表设计:      
申请表: apply_info
列名 类型 备注
info_id varchar id
info varchar 申请信息
status int 申请状态
审核记录表: audit_log
 列名 类型 备注
log_id varchar 记录id
info_id varchar 关联的申请表id
result int 审核结果
status_before int 审核前状态
status_after int 审核后状态
audit_time datetime 审核时间
 查询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条件的写法。

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

 

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

posted @ 2020-06-19 10:41  海尚书  阅读(543)  评论(0编辑  收藏  举报