Nó sẽ hoạt động nếu bạn chuyển cái này sang where
mệnh đề:
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
)
Tuy nhiên, bạn mất các đặc điểm 'nối ngoài cùng bên trái', vì vậy bạn cũng muốn thêm:or fx.ftf_validitystartdate is null
. Tôi đoán rằng v_CurrentDate đến từ "p". Bạn nên sử dụng bí danh bảng trước tên cột.
Tuy nhiên, tôi đặt câu hỏi liệu truy vấn con có thực sự cần thiết hay không. Nó chỉ cần thiết khi có nhiều hơn một bản ghi đáp ứng các điều kiện bên trong truy vấn con. Nếu không, tôi nghĩ bạn chỉ có thể thay đổi on
mệnh đề là:
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