有如下SQL语句:
               SELECT  COUNT(*)   
               FROM  SP
                 INNER JOIN  EEPP
                    ON SP.SP_STORE_ID = EEPP_ACCOUNT_PICKUP_STORE_ID
                   AND SP.SP_COMPANY_GROUP_ID = EEPP.EEPP_COMPANY_GROUP_ID
                   
                 INNER JOIN  SIE
                    ON EEPP_ACCOUNT_PICKUP_STORE_ID = SIE_STORE_ID
                   AND EEPP_COLLECT_DATE = SIE_DATE 
                   AND EEPP_COMPANY_GROUP_ID = SIE_COMPANY_GROUP_ID
                   AND SIE_NO = '01' 
                   
                 INNER JOIN  TSM
                    ON TSM_ID = '0220'
                    AND TSM_SUB_VALUE =EEPP.EEPP_ECCODE
                    AND TSM_SUB_VALUE3 =SP.SP_COMPANY_ID
                   
                 WHERE 1=1
                   AND SP_ACCOUNTANT = 'SP'
                   AND SP_COMPANY_ID = '3100'
                   AND SP_COMPANY_GROUP_ID = '40'
 这样写法一直执行中,查询不出结果。
1. 如果吧“3100” 改成”1100“ ,把 ‘40’ 改成'30' 可以执行出结果。
2. 或者注释条件中(除1=1) 其中任何一行也可执行出结果。不会一直执行中;
3.或者去掉 “  INNER JOIN  TSM
                     ON TSM_ID = '0220'
                    AND TSM_SUB_VALUE =EEPP.EEPP_ECCODE
                    AND TSM_SUB_VALUE3 =SP.SP_COMPANY_ID ”这段关联,也能执行出结果。
以上这种查询不出结果 是什么原因造成的,谢谢各位帮忙啦!

解决方案 »

  1.   

     也没查到有锁表,这个条件的数据只有143笔记录。不知ORACEL查询的机制是什么。难道是表有问题吗?
      

  2.   

    可以试下用left join替换inner join 
      

  3.   

    改成LEFT可以出结果,但这样检索出来的结果不正确。LEFT JOIN 和 INNER JOIN 查询的性能有什么差别?
      

  4.   

    统计信息问题,执行计划两处笛卡尔积连接,重新收集执行计划 或者禁用笛卡尔积
    /*+ opt_param('_optimizer_mjc_enabled','false')*/