2017-06-01 129 views
0

以下是这是给我的错误查询:ORA-01427:单行子查询返回不止一行01427. 00000 - “单行子查询返回多个行”

  • 如果ed_temp和ed_indv_counters使用edg_trace_id进行连接。
  • 如果Ed_eligiblity将current_elig_ind设置为'P',那么采用该edg_trace_id else,将edg_trace_id与current_elig_ind'A'相加。

查询:

select distinct 
     i.edg_trace_id, 
     i.* 
from ed_indv_counters i, 
     ed_temp e 
where e.case_num = '720335' 
and e.payment_beg_dt<'30-JUL-2017' 
and e.program_cd = 'TF' 
and e.delete_sw='N' 
and di_ind='Y' 
and counter_type_cd='TLP' 
and i.edg_trace_id in (
     CASE e.current_elig_ind 
     WHEN 'P' then e.edg_trace_id 
     ELSE (
      Select e1.edg_trace_id 
      from ed_temp e1 
      where e1.case_num='720335' 
      and e1.program_cd = 'TF' 
      and e1.delete_sw='N' 
      and e1.current_elig_ind='A' 
      and e1.payment_beg_dt not in (
        select payment_beg_dt 
        from ed_temp e2 
        where e2.current_elig_ind='P' 
        and e2.case_num='720335' 
        and e2.delete_sw='N' 
        and e2.program_cd = 'TF' 
       ) 
     ) 
     END 
     ) 
order by i.counter_begin_dt; 

回答

0

您可以尝试使用UNION ALL和相互排斥的过滤器,而不是CASE声明:

select distinct 
     i.edg_trace_id, 
     i.* 
from ed_indv_counters i, 
     ed_temp e 
where e.case_num = '720335' 
and e.payment_beg_dt < DATE '2017-07-30' -- Use a date literal rather than string 
and e.program_cd = 'TF' 
and e.delete_sw='N' 
and di_ind='Y' 
and counter_type_cd='TLP' 
and i.edg_trace_id in (
     SELECT e.edg_trace_id 
     FROM DUAL 
     WHEN e.current_elig_ind = 'P' 
     UNION ALL 
     Select e1.edg_trace_id 
     from ed_temp e1 
     where (e.current_elig_ind <> 'P' OR e.current_elig_ind IS NULL) 
     and e1.case_num='720335' 
     and e1.program_cd = 'TF' 
     and e1.delete_sw='N' 
     and e1.current_elig_ind='A' 
     and e1.payment_beg_dt not in (
        select payment_beg_dt 
        from ed_temp e2 
        where e2.current_elig_ind='P' 
        and e2.case_num='720335' 
        and e2.delete_sw='N' 
        and e2.program_cd = 'TF' 
       ) 
    ) 
order by i.counter_begin_dt; 
+0

这个查询作品完美,但有调整它的任何方式。 ed_temp表有100列,并加入这给我的性能问题 –

相关问题