简体   繁体   English

oracle中旧式join到ansi join的转换

[英]Conversion of old style join to ansi join in oracle

I have a huge sql which is written in old style join code and i am trying to change it to ansi join, i dint not paste the select query and just pasted the join condition for ease The ansi join is not producing any data, but the old one does.我有一个巨大的 sql,它是用旧式连接代码编写的,我试图将其更改为 ansi join,我没有粘贴选择查询,只是为了方便粘贴了连接条件 ansi 连接不产生任何数据,但是旧的。

Here is my old style join这是我的旧式连接

 select *****       
 from CHECKING_EXT_CASH_FLW_REP CS, OTP_ALL_REP TP_REP ,
 (select M_LABEL,min(M_ALT_ID) as M_ALT_ID from ING_ALIAS_REP where M_ALT_SYS=@CtpAlternateSystem:C group by M_LABEL) CA,
 (select M_LABEL,min(M_ALT_ID) as M_ALT_ID from ING_ALIAS_REP where M_ALT_SYS=@PtfAlternateSystem:C group by M_LABEL) PA
 where TP_REP.M_REF_DATA=CS.M_REF_DATA
 and TP_REP.M_TP_PFOLIO=CS.M_TP_PFOLIO
 and TP_REP.M_NB=CS.M_NB
 and CA.M_LABEL(+)=TP_REP.M_TP_CNTRPID
 and PA.M_LABEL(+)=TP_REP.M_TP_PFOLIO 
 and CS.M_F_OBSCOM ='N' 

i tried to convert it to ansi join and below is the code我试图将它转换为ansi join,下面是代码

 select **********
 from OTP_ALL_REP TP_REP  
    JOIN  CHECKING_EXT_CASH_FLW_REP CS ON  (TP_REP.M_REF_DATA=CS.M_REF_DATA and TP_REP.M_TP_PFOLIO=CS.M_TP_PFOLIO and TP_REP.M_NB=CS.M_NB )
    RIGHT OUTER JOIN (select M_LABEL,min(M_ALT_ID) as M_ALT_ID from ING_ALIAS_REP where M_ALT_SYS=@CtpAlternateSystem:C group by M_LABEL) CA ON( CA.M_LABEL=TP_REP.M_TP_CNTRPID )
    RIGHT OUTER JOIN (select M_LABEL,min(M_ALT_ID) as M_ALT_ID from ING_ALIAS_REP where M_ALT_SYS=@PtfAlternateSystem:C group by M_LABEL) PA ON (PA.M_LABEL=TP_REP.M_TP_PFOLIO)

The old code works but the latter does not , is there any thing that i am missing out on or do i have an issue with my conversion all together.旧代码有效,但后者无效,我是否遗漏了任何内容,或者我的转换是否有问题。

I'm pretty sure this is the logic that you want:我很确定这是你想要的逻辑:

 select *****       
 from OTP_ALL_REP TP_REP join
      CHECKING_EXT_CASH_FLW_REP CS
      on TP_REP.M_REF_DATA = CS.M_REF_DATA and
         TP_REP.M_TP_PFOLIO = CS.M_TP_PFOLIO
         TP_REP.M_NB = CS.M_NB left join
      (select M_LABEL, min(M_ALT_ID) as M_ALT_ID
       from ING_ALIAS_REP
       where M_ALT_SYS = @CtpAlternateSystem:C
       group by M_LABEL
      ) CA
      on CA.M_LABEL = TP_REP.M_TP_CNTRPID left join
      (select M_LABEL, min(M_ALT_ID) as M_ALT_ID
       from ING_ALIAS_REP
       where M_ALT_SYS = @PtfAlternateSystem:C
       group by M_LABEL
      ) PA
      on PA.M_LABEL = TP_REP.M_TP_PFOLIO
where CS.M_F_OBSCOM = 'N' ;

对我来说,看起来LEFT (outer) JOIN可能会完成这项工作(而不是RIGHT一个)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM