Det burde virke, hvis du skifter dette til en where
klausul:
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
)
Men du mister egenskaberne 'venstre ydre sammenføjning', så du vil også tilføje:or fx.ftf_validitystartdate is null
. Jeg gætter på, at v_CurrentDate kommer fra "p". Det er altid en god idé at bruge tabelaliasser før kolonnenavne.
Jeg stiller dog spørgsmålstegn ved, om underforespørgslen virkelig er nødvendig. Det er kun nødvendigt, når der er mere end én post, der opfylder betingelserne i underforespørgslen. Ellers tror jeg, at du bare kan ændre on
klausul skal være:
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