Преобразование соединения старого стиля в ANSI соединение в oracle - PullRequest
1 голос
/ 18 марта 2020

У меня есть огромный sql, который написан в старом коде соединения, и я пытаюсь изменить его на ANSI-соединение, я не вставляю запрос выбора и просто вставил условие соединения для простоты. Соединение ANSI не производит любые данные, но старый делает.

Вот мой старый стиль соединения

 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' 

Я пытался преобразовать его в ANSI соединение и ниже код

 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)

Старый код работает, но последний - нет, есть ли какая-то вещь, по которой я упускаю или у меня есть проблемы с моим преобразованием все вместе.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Мне кажется, что LEFT (outer) JOIN может сделать работу (вместо RIGHT один).

1 голос
/ 18 марта 2020

Я почти уверен, что вам нужна эта логика c:

 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' ;
...