ORA-01427: 子查询返回多于一行

Posted

技术标签:

【中文标题】ORA-01427: 子查询返回多于一行【英文标题】:ORA-01427: Subquery returns more than one row 【发布时间】:2017-01-31 20:40:02 【问题描述】:

当我执行下面的查询时,我收到这样的消息:"ORA-01427: Sub-query returns more than one row"

Define REN_RunDate = '20160219'
Define MOP_ADJ_RunDate = '20160219'
Define RID_RunDate = '20160219'
Define Mbr_Err_RunDate = '20160219'
Define Clm_Err_RunDate = '20160219'
Define EECD_RunDate = '20160219'

select t6.Member_ID,  (Select 'Y' from MBR_ERR t7 where t7.Member_ID = t6.Member_ID and t7.Rundate = &Mbr_Err_RunDate ) Mbr_Err,
NVL(Claim_Sent_Amt,0) Sent_Claims, Rejected_Claims,Orphan_Claim_Amt,Claims_Accepted, MOP_Adj_Sent Sent_MOP_Adj,Net_Sent,
 (Case
     When Net_Sent < 45000 then 0          
     When Net_Sent > 25000 then 20500    
     Else
      Net_Sent - 45000                     
    End
   )Net_Sent_RI,

   ' ' Spacer,

 Total_Paid_Claims CMS_Paid_Claims, MOP_Adjustment CM_MOP_Adj, MOP_Adjusted_Paid_claims CM_Net_Claims, Estimated_RI_Payment CM_RI_Payment
  from
 (
 select  NVL(t3.Member_ID,t5.Member_ID)Member_ID, t3.Claim_Sent_Amt, NVL(t4.Reject_Claims_Amt,0) Rejected_Claims, NVL( t8.Orphan_Amt,0) Orphan_Claim_Amt, 
   (t3.Claim_Sent_Amt - NVL(t4.Reject_Claims_Amt,0) - NVL(t8.Orphan_Amt,0)) Claims_Accepted,
   NVL(t2.MOP_Adj_Amt,0) MOP_Adj_Sent ,
   ( (t3.Claim_Sent_Amt - NVL(t4.Reject_Claims_Amt,0)) -  NVL(t2.MOP_Adj_Amt,0) -  NVL(t8.Orphan_Amt,0) ) Net_Sent, 
 t5.Member_ID CMS_Mbr_ID,t5.Total_Paid_Claims,t5.MOP_Adjustment, t5.MOP_Adjusted_Paid_Claims, t5.Estimated_RI_Payment
 From
 (
 Select t1.Member_ID, Sum( t1.Paid_Amount) Claim_Sent_Amt
 From RENS t1
 where t1.rundate = &REN_RunDate
 group by t1.Member_ID

) t3

Left Join MOP_ADJ t2
 on (t3.Member_ID = t2.Member_ID and t2.rundate = &MOP_ADJ_RunDate)

Left Join 
 (select Member_ID, sum(Claim_Total_Paid_Amount) Reject_Claims_Amt from CLAIM_ERR
 where Rundate = &Claim_Err_RunDate
 and Claim_Total_Paid_Amount != 0
 Group by member_ID
 )t4
 on (t4.Member_ID = t3.Member_ID )

Full Outer Join 
 (
 select distinct Member_ID,Total_Paid_Claims,MOP_Adjustment,MOP_Adjusted_Paid_Claims, Estimated_RI_Payment
  from RID
 where Rundate = &RID_RunDate
 and Estimated_RI_Payment != 0
 )t5
 On(t5.Member_ID = t3.Member_ID)

Left Outer Join 
 (
 select Member_ID, Sum(Claim_Paid_Amount) Orphan_Amt
 From EECD
 where RunDate = &EECD_RunDate
 group by Member_ID
 )t8
 On(t8.Member_ID = t3.Member_ID)

 )t6
 order by Member_ID

【问题讨论】:

我也可以编写一个这样的查询。我可以编写一个更短的查询,在执行时返回该错误。有问题,还是您只是发布状态报告? How to fix ORA-01427的可能重复 【参考方案1】:

select 列中有这个表达式(在代码的顶部):

(Select 'Y' from MBR_ERR t7 where t7.Member_ID = t6.Member_ID 
                              and t7.Rundate = &Mbr_Err_RunDate ) Mbr_Err

如果您想选择文字“Y”,则只需选择'Y' as Mbr_Err。如果您想选择“Y”或 null,具体取决于子查询是只返回一行还是零行,然后这样写。

我怀疑这个子查询(或者你的代码中的另一个子查询,以类似的方式使用)返回不止一行 - 在这种情况下,你会得到你得到的错误。

【讨论】:

以上是关于ORA-01427: 子查询返回多于一行的主要内容,如果未能解决你的问题,请参考以下文章

查询返回:ORA-01427 单行子查询返回多于一行

ORA-01427 单行子查询返回多于一行

Oracle SQL:ORA-01427:单行子查询返回多于一行

ORA-01427: 单行子查询返回多于一行 ,,WHEN USING SELECT COUNT

我得到那个错误 ORA-01427: 单行子查询返回多于一行

Oracle APEX 交互式报告中的错误 - ORA-01427:单行子查询返回多于一行