zoukankan      html  css  js  c++  java
  • 子查询解嵌套in改写为exists

    SELECT *
      FROM (SELECT pubformdat0_.id                  id332_,
                   pubformdat0_.domain_id           domain2_332_,
                   pubformdat0_.process_id          process3_332_,
                   pubformdat0_.entity_id           entity4_332_,
                   pubformdat0_.file_type           file5_332_,
                   pubformdat0_.title               title332_,
                   pubformdat0_.word_no             word7_332_,
                   pubformdat0_.priority            priority332_,
                   pubformdat0_.secret_level        secret9_332_,
                   pubformdat0_.drafter             drafter332_,
                   pubformdat0_.drafter_name        drafter11_332_,
                   pubformdat0_.draft_dept          draft12_332_,
                   pubformdat0_.draft_deptname      draft13_332_,
                   pubformdat0_.draft_date          draft14_332_,
                   pubformdat0_.end_date            end15_332_,
                   pubformdat0_.arch_state          arch16_332_,
                   pubformdat0_.arch_fileid         arch17_332_,
                   pubformdat0_.gq_templateid       gq18_332_,
                   pubformdat0_.gw_templateid       gw19_332_,
                   pubformdat0_.edit_flag           edit20_332_,
                   pubformdat0_.delete_flag         delete21_332_,
                   pubformdat0_.operator            operator332_,
                   pubformdat0_.operate_date        operate23_332_,
                   pubformdat0_.file_security_level file24_332_,
                   pubformdat0_.yj_flag             yj25_332_,
                   pubformdat0_.yj_user             yj26_332_
              FROM wf_pub_form_data pubformdat0_
             WHERE 1 = 1
               AND pubformdat0_.id IN
                   (SELECT DISTINCT pubformcas1_.form_id
                      FROM wf_pub_form_case pubformcas1_
                     WHERE pubformcas1_.case_id IN
                           (SELECT to_char(caserun0_.id)
                              FROM case_run caserun0_, workitem_run workitemru1_
                             WHERE caserun0_.id = workitemru1_.caseid
                               AND caserun0_.state = 2
                               AND workitemru1_.performer IN ('300016/00415')
                               AND workitemru1_.valid_flag = '0'
                            UNION ALL
                            SELECT to_char(caserun2_.id)
                              FROM case_run         caserun2_,
                                   workitem_history workitemhi3_
                             WHERE caserun2_.id = workitemhi3_.caseid
                               AND caserun2_.state = 2
                               AND workitemhi3_.performer IN ('300016/00415')
                               AND workitemhi3_.valid_flag = '0'))
             ORDER BY pubformdat0_.operate_date DESC)
     WHERE rownum <= 10;
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Plan hash value: 1843931409
    
    ------------------------------------------------------------------------------------------------------------------
    | Id  | Operation        | Name   | Rows  | Bytes |TempSpc| Cost (%CPU)| Time  |
    ------------------------------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT       |    |    10 | 11200 |  |   230M  (1)|769:57:46 |
    |*  1 |  COUNT STOPKEY        |    |  |  |  |       |   |
    |   2 |   VIEW         |    |   718 |   785K|  |   230M  (1)|769:57:46 |
    |*  3 |    SORT ORDER BY STOPKEY      |    |   718 |   281K|   696K|   230M  (1)|769:57:46 |
    |   4 |     NESTED LOOPS       |    |   718 |   281K|  |   230M  (1)|769:57:45 |
    |   5 |      VIEW        | VW_NSO_1   |   714 | 35700 |  |   230M  (1)|769:57:28 |
    |   6 |       HASH UNIQUE       |    |   714 | 40698 |  |       |   |
    |*  7 |        FILTER        |    |  |  |  |       |   |
    |   8 |  TABLE ACCESS FULL      | WF_PUB_FORM_CASE  |   375K|    20M|  |  1817   (1)| 00:00:22 |
    |   9 |  UNION-ALL       |    |  |  |  |       |   |
    |  10 |   NESTED LOOPS       |    |     1 |    32 |  |   261   (0)| 00:00:04 |
    |  11 |    TABLE ACCESS BY INDEX ROWID| WORKITEM_RUN  |   132 |  3168 |  |   129   (0)| 00:00:02 |
    |* 12 |     INDEX RANGE SCAN      | IDX_WORKITEM_R_13 |   132 |  |  |     3   (0)| 00:00:01 |
    |* 13 |    TABLE ACCESS BY INDEX ROWID| CASE_RUN   |     1 |     8 |  |     1   (0)| 00:00:01 |
    |* 14 |     INDEX UNIQUE SCAN      | PK_CASE_RUN  |     1 |  |  |     0   (0)| 00:00:01 |
    |  15 |   NESTED LOOPS       |    |     1 |    31 |  |   368   (1)| 00:00:05 |
    |  16 |    TABLE ACCESS BY INDEX ROWID| WORKITEM_HISTORY  |   582 | 13386 |  |   226   (0)| 00:00:03 |
    |* 17 |     INDEX RANGE SCAN      | IDX_WORKITEM_H_13 |   325 |  |  |     5   (0)| 00:00:01 |
    |* 18 |    TABLE ACCESS BY INDEX ROWID| CASE_RUN   |     1 |     8 |  |     1   (0)| 00:00:01 |
    |* 19 |     INDEX UNIQUE SCAN      | PK_CASE_RUN  |     1 |  |  |     0   (0)| 00:00:01 |
    |  20 |      TABLE ACCESS BY INDEX ROWID     | WF_PUB_FORM_DATA  |     1 |   352 |  |     2   (0)| 00:00:01 |
    |* 21 |       INDEX UNIQUE SCAN       | SYS_C0051297  |     1 |  |  |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       1 - filter(ROWNUM<=10)
       3 - filter(ROWNUM<=10)
       7 - filter( EXISTS ( (SELECT /*+ */ TO_CHAR("CASERUN0_"."ID") FROM "WORKITEM_RUN"
           "WORKITEMRU1_","CASE_RUN" "CASERUN0_" WHERE "CASERUN0_"."ID"="WORKITEMRU1_"."CASEID" AND
           "CASERUN0_"."STATE"=2 AND TO_CHAR("CASERUN0_"."ID")=:B1 AND "WORKITEMRU1_"."VALID_FLAG"='0' AND
           "WORKITEMRU1_"."PERFORMER"='300016/00415') UNION ALL  (SELECT /*+ */ TO_CHAR("CASERUN2_"."ID") FROM
           "WORKITEM_HISTORY" "WORKITEMHI3_","CASE_RUN" "CASERUN2_" WHERE "CASERUN2_"."ID"="WORKITEMHI3_"."CASEID"
           AND "CASERUN2_"."STATE"=2 AND TO_CHAR("CASERUN2_"."ID")=:B2 AND "WORKITEMHI3_"."VALID_FLAG"='0' AND
           "WORKITEMHI3_"."PERFORMER"='300016/00415')))
      12 - access("WORKITEMRU1_"."PERFORMER"='300016/00415' AND "WORKITEMRU1_"."VALID_FLAG"='0')
      13 - filter("CASERUN0_"."STATE"=2)
      14 - access("CASERUN0_"."ID"="WORKITEMRU1_"."CASEID")
           filter(TO_CHAR("CASERUN0_"."ID")=:B1)
      17 - access("WORKITEMHI3_"."PERFORMER"='300016/00415' AND "WORKITEMHI3_"."VALID_FLAG"='0')
      18 - filter("CASERUN2_"."STATE"=2)
      19 - access("CASERUN2_"."ID"="WORKITEMHI3_"."CASEID")
           filter(TO_CHAR("CASERUN2_"."ID")=:B1)
      21 - access("PUBFORMDAT0_"."ID"="$nso_col_1")
    
    50 rows selected.
    
    
    7 - filter( EXISTS ( (SELECT /*+ */ TO_CHAR("CASERUN0_"."ID") FROM "WORKITEM_RUN"
           "WORKITEMRU1_","CASE_RUN" "CASERUN0_" WHERE "CASERUN0_"."ID"="WORKITEMRU1_"."CASEID" AND
           "CASERUN0_"."STATE"=2 AND TO_CHAR("CASERUN0_"."ID")=:B1 AND "WORKITEMRU1_"."VALID_FLAG"='0' AND
           "WORKITEMRU1_"."PERFORMER"='300016/00415') UNION ALL  (SELECT /*+ */ TO_CHAR("CASERUN2_"."ID") FROM
           "WORKITEM_HISTORY" "WORKITEMHI3_","CASE_RUN" "CASERUN2_" WHERE "CASERUN2_"."ID"="WORKITEMHI3_"."CASEID"
           AND "CASERUN2_"."STATE"=2 AND TO_CHAR("CASERUN2_"."ID")=:B2 AND "WORKITEMHI3_"."VALID_FLAG"='0' AND
           "WORKITEMHI3_"."PERFORMER"='300016/00415')))
    
     pubformcas1_.case_id IN
                           (SELECT to_char(caserun0_.id)
                              FROM case_run caserun0_, workitem_run workitemru1_
                             WHERE caserun0_.id = workitemru1_.caseid
                               AND caserun0_.state = 2
                               AND workitemru1_.performer IN ('300016/00415')
                               AND workitemru1_.valid_flag = '0'
                            UNION ALL
                            SELECT to_char(caserun2_.id)
                              FROM case_run         caserun2_,
                                   workitem_history workitemhi3_
                             WHERE caserun2_.id = workitemhi3_.caseid
                               AND caserun2_.state = 2
                               AND workitemhi3_.performer IN ('300016/00415')
                               AND workitemhi3_.valid_flag = '0'))
    
    这里子查询解嵌套没有展开,改写如下:
      SELECT *
        FROM (SELECT  pubformdat0_.id id332_, pubformdat0_.domain_id domain2_332_, 
                     pubformdat0_.process_id process3_332_, 
                     pubformdat0_.entity_id entity4_332_, 
                     pubformdat0_.file_type file5_332_, 
                     pubformdat0_.title title332_, pubformdat0_.word_no word7_332_, 
                     pubformdat0_.priority priority332_, 
                     pubformdat0_.secret_level secret9_332_, 
                     pubformdat0_.drafter drafter332_, 
                     pubformdat0_.drafter_name drafter11_332_, 
                     pubformdat0_.draft_dept draft12_332_, 
                     pubformdat0_.draft_deptname draft13_332_, 
                     pubformdat0_.draft_date draft14_332_, 
                     pubformdat0_.end_date end15_332_, 
                     pubformdat0_.arch_state arch16_332_, 
                     pubformdat0_.arch_fileid arch17_332_, 
                     pubformdat0_.gq_templateid gq18_332_, 
                     pubformdat0_.gw_templateid gw19_332_, 
                     pubformdat0_.edit_flag edit20_332_, 
                     pubformdat0_.delete_flag delete21_332_, 
                     pubformdat0_.operator operator332_, 
                     pubformdat0_.operate_date operate23_332_, 
                     pubformdat0_.file_security_level file24_332_, 
                     pubformdat0_.yj_flag yj25_332_, pubformdat0_.yj_user yj26_332_
                  FROM wf_pub_form_data pubformdat0_
                  WHERE 1 = 1
                    AND pubformdat0_.id IN (SELECT  DISTINCT pubformcas1_.form_id
                             FROM wf_pub_form_case pubformcas1_
                            /* WHERE pubformcas1_.case_id IN */
                            where exists 
                             -----------------------------------------------------------------------
                            (select null from  (SELECT  to_char(caserun0_.id) as id
                                                                FROM case_run caserun0_,
                                                                     workitem_run workitemru1_
                                                                WHERE caserun0_.id 
                                                                      = 
                                                                      workitemru1_.caseid
                                                                  AND caserun0_.state
                                                                      = 2
                                                                  AND workitemru1_.performer
                                                                      IN (
                                                                       '300016/00415'
                                                                       )
                                                                  AND workitemru1_.valid_flag
                                                                      = '0'
                                                            UNION ALL
                                                            SELECT to_char(
                                                                   caserun2_.id)
                                                                FROM case_run caserun2_,
                                                                     workitem_history workitemhi3_
                                                                WHERE caserun2_.id 
                                                                      = 
                                                                      workitemhi3_.caseid
                                                                  AND caserun2_.state
                                                                      = 2
                                                                  AND workitemhi3_.performer
                                                                      IN (
                                                                       '300016/00415'
                                                                       )
                                                                  AND workitemhi3_.valid_flag
                                                                      = '0'
                                                                      ) t
                                                                      
                                                         where    pubformcas1_.case_id =  t.id         )
                                                                      
                                                         
                                                                      )
                  ORDER BY pubformdat0_.operate_date DESC)
        WHERE rownum <= 10
    
     
    


     

  • 相关阅读:
    springboot 获取enviroment.Properties的几种方式
    Spring Boot加载配置文件的完整步骤
    SpringBoot测试Controller层
    SpringBoot集成测试
    PowerMockito模拟private static final类变量
    玩转Spring JUnit+mockito+powermock单元测试
    Junit测试Controller(MockMVC使用),传输@RequestBody数据解决办法
    spring boot 使用@ConfigurationProperties加载配置文件到类中
    Rsync命令参数详解
    Linux PS 命令详解
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3798113.html
Copyright © 2011-2022 走看看