Es sollte funktionieren, wenn Sie dies auf ein where
umstellen Klausel:
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
)
Sie verlieren jedoch die Eigenschaften des „linken äußeren Joins“, sodass Sie auch Folgendes hinzufügen möchten:or fx.ftf_validitystartdate is null
. Ich vermute, dass v_CurrentDate von "p" kommt. Es ist immer eine gute Idee, Tabellenaliase vor Spaltennamen zu verwenden.
Ich frage mich jedoch, ob die Unterabfrage wirklich benötigt wird. Es wird nur benötigt, wenn es mehr als einen Datensatz gibt, der die Bedingungen in der Unterabfrage erfüllt. Ansonsten denke ich, dass Sie einfach den on
ändern können Klausel zu sein:
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