Трябва да работи, ако превключите това на where
клауза:
select *
from acc_accounts acc join
kp_paramcore p
on acc.account_no = p.accountnum and
acc.suffix = p.suffixc LEFT JOIN
ftf_rates fx
ON p.maturestart = fx.ftf_vadealtsinir and
p.maturefinish = fx.ftf_vadeustsinir and
fx.statusrec = 'A' and
fx.currencycode = acc.currencsw_kod and
fx.status= 'A'
where fx.ftf_validitystartdate= (SELECT MAX(ff.ftf_validitystartdate)
FROM ftf_rates ff
WHERE ff.status = 'A' and
ff.statusrec = 'A'
p.v_CurrentDate BETWEEN ff.systemstartdate AND ff.systemfinishdate AND ff.currencycode = acc.currencsw_kod
)
Вие обаче губите характеристиките „ляво външно съединение“, така че бихте искали също да добавите:or fx.ftf_validitystartdate is null
. Предполагам, че v_CurrentDate идва от "p". Винаги е добра идея да използвате псевдоними на таблици преди имена на колони.
Питам се обаче дали подзаявката наистина е необходима. Необходим е само когато има повече от един запис, който отговаря на условията в подзаявката. В противен случай мисля, че можете просто да промените on
клауза да бъде:
ON p.maturestart = fx.ftf_vadealtsinir and
p.maturefinish = fx.ftf_vadeustsinir and
fx.statusrec = 'A' and
fx.currencycode = acc.currencsw_kod and
fx.status= 'A'and
p.v_CurrentDate BETWEEN fx.systemstartdate AND fx.systemfinishdate