2表2状态 聚合成 视图1状态

业务场景

遇见了查询数据需要从两个表中分别根据其中状态进行查询。
问题:

如果同时查询未上报医保已接收数据,条件会变成 IN A(0,10) AND B(0,-9) 这样就会把A中0状态的数据也进行B的筛选,可能少数据了。

解决方案一

直接用AB表状态进行筛选,or配合条件。
但是在过于流程化了,即 太多的if条件判断了。

业务逻辑图一:
在这里插入图片描述

解决方案二

根据客户端勾选的状态,依次去查询数据,若复选多个则sql查询多次,根据查询出来的数据进行一个聚合返回给分页插件。
该种方案 暂时行不通,因为Mybatis 中的PageHelper 是根据紧跟PageHelper.startPage()后的第一个SQL语句进行分页查询的,多个查询语句会导致分页插件失效,聚合起来后也没法使用,若需使用,需要自己写一个分页流程语句。

弃用原因:
1.多次sqlsession请求查询有压力
2.聚合后的数据无法使用Mybatis的自带分页插件,需要自定义一个

业务逻辑图二:
在这里插入图片描述

最终解决方案

将AB表合成一个视图,聚合为一个状态表,然后查询这个状态表单状态查询就可以了。

最终业务逻辑图:
在这里插入图片描述
视图语句

create or replace view MEDICAL_DATA_UPLOAD.V_UPLOAD_TASK_QUERY_RESULT as
select DATA_PID,
       UPLOAD_TYPE,
       LAST_UPLOAD_TIME,
       UPLOAD_RESULT,
       ut.GMT_CREATE UT_GMT_CREATE,
       ut.GMT_MODIFIED UT_GMT_MODIFIED,
       IS_DELETE,
       ut.ID UT_ID,
       ut.SETL_ID UT_SETL_ID,
       qr.ID QR_ID,
       RETRY_TIMES,
       qr.SETL_ID QR_SETL_ID,
       INS_RECEIVE_TIME,
       REQUEST_PARAM,
       RESPONSE_PARAM,
       qr.GMT_CREATE QR_GMT_CREATE,
       qr.GMT_MODIFIED QR_GMT_MODIFIED,
       UPLOAD_STATUS,
       QUERY_STATUS,
       case
           when ut.UPLOAD_STATUS = 0 then  0
           when qr.QUERY_STATUS = 10 then  5
           when ut.UPLOAD_STATUS = 10 and qr.QUERY_STATUS in (0,-9) then  10
           when ut.UPLOAD_STATUS = -9 then  -9
       end status
from MEDICAL_DATA_UPLOAD.UPLOAD_TASK ut
         left join MEDICAL_DATA_UPLOAD.QUERY_RESULT qr on qr.upload_task_id = ut.id;  

-- drop view MEDICAL_DATA_UPLOAD.V_UPLOAD_TASK_QUERY_RESULT

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值