2
回答
Oracle 数据库SQL执行异常还是逻辑有问题?
华为云4核8G,高性能云服务器,免费试用   

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查不出数据。这是为什么?


举报
liangxiao
发帖于2年前 2回/177阅
共有2个答案 最后回答: 2年前

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,这当然会导致外查询返回的记录数不同

引用来自“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以外,所以这条数据在外部查询是有数据的。

--- 共有 1 条评论 ---
IdleMan你说的都是对的 2年前 回复
顶部