Oracle 数据库SQL执行异常还是逻辑有问题?

liangxiao 发布于 2016/06/21 16:07
阅读 183
收藏 0

SQL1:
    select rid , sum(fact_compensation) as totalFactCompensation , max(repay_date) as repayeeFactDate from nwd_loan_repayment_info where rid in 
    (
select rid from nwd_loan_repayment where state in ( 1,2,3,4,5) and ext_02 is null and rid =2200000020051925   and rownum < 501
)
group by rid ;
    
   SQL2: 
      select rid , sum(fact_compensation) as totalFactCompensation , max(repay_date) as repayeeFactDate from nwd_loan_repayment_info where rid in 
    (
select rid from nwd_loan_repayment where state in ( 1,2,3,4,5) and ext_02 is null    and rownum < 501
)

group by rid 


在Oracle数据库中:

SQL1  比SQL2  多一个 多一个条件,SQL1能查出数据;SQL2查不出数据。这是为什么?


加载中
0
IdleMan
IdleMan

SQL1子查询返回的是满足如下条件的500条记录

state in ( 1,2,3,4,5) and ext_02 is null and rid =2200000020051925

SQL2子查询返回的是满足如下条件的500条记录

state in ( 1,2,3,4,5) and ext_02 is null


SQL2中返回的500条有某些记录的rid !=2200000020051925,这当然会导致外查询返回的记录数不同

0
liangxiao
liangxiao

引用来自“IdleMan”的评论

SQL1子查询返回的是满足如下条件的500条记录

state in ( 1,2,3,4,5) and ext_02 is null and rid =2200000020051925

SQL2子查询返回的是满足如下条件的500条记录

state in ( 1,2,3,4,5) and ext_02 is null


SQL2中返回的500条有某些记录的rid !=2200000020051925,这当然会导致外查询返回的记录数不同

问题发现了。应该不是你说的这个原因。

问题在rownum < 501上。

内部查询的意思取前500条数据,而这500条数据在外部查询里面是没有数据。

rid =2200000020051925  应该是内部查询排序在500以外,所以这条数据在外部查询是有数据的。

IdleMan
IdleMan
你说的都是对的
返回顶部
顶部