Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

JOIN Problema:Corrija a instrução SQL para resolver:ORA-01799:uma coluna não pode ser associada a uma subconsulta


Deve funcionar se você mudar isso para um where cláusula:
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
                                )

No entanto, você perde as características de 'junção externa esquerda', então você também gostaria de adicionar:or fx.ftf_validitystartdate is null . Eu acho que v_CurrentDate vem de "p". É sempre uma boa ideia usar aliases de tabela antes dos nomes das colunas.

No entanto, questiono se a subconsulta é realmente necessária. Só é necessário quando houver mais de um registro que atenda às condições dentro da subconsulta. Caso contrário, acho que você pode simplesmente alterar o on cláusula ser:
    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