sql >> Base de Datos >  >> RDS >> Oracle

JOIN Problema:corrija la instrucción SQL para resolver:ORA-01799:una columna no puede unirse externamente a una subconsulta

Debería funcionar si cambias esto a un 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
                                )

Sin embargo, pierde las características de 'unión externa izquierda', por lo que también querrá agregar:or fx.ftf_validitystartdate is null . Supongo que v_CurrentDate proviene de "p". Siempre es una buena idea usar alias de tablas antes de los nombres de las columnas.

Sin embargo, me pregunto si la subconsulta es realmente necesaria. Solo es necesario cuando hay más de un registro que cumple las condiciones dentro de la subconsulta. De lo contrario, creo que puedes cambiar el on cláusula a 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