sql >> Database >  >> RDS >> Oracle

JOIN-probleem:corrigeer de SQL-instructie om op te lossen:ORA-01799:een kolom mag niet worden toegevoegd aan een subquery

Het zou moeten werken als je dit overschakelt naar een where clausule:

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
                                )

Je verliest echter de kenmerken van de 'left outer join', dus je zou ook willen toevoegen:or fx.ftf_validitystartdate is null . Ik denk dat v_CurrentDate afkomstig is van "p". Het is altijd een goed idee om tabelaliassen voor kolomnamen te gebruiken.

Ik vraag me echter af of de subquery echt nodig is. Het is alleen nodig als er meer dan één record is dat voldoet aan de voorwaarden in de subquery. Anders denk ik dat je gewoon de on . kunt wijzigen clausule te zijn:

    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


  1. SQL-rijen naar kolommen

  2. SQL Server Besturingssysteemfout 5:5 (Toegang is geweigerd.)

  3. MySQL 5.6 InnoDB Zoeken in volledige tekst

  4. MySQL, voeg twee kolommen samen