栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号