sql >> Databasteknik >  >> RDS >> Oracle

JOIN Problem:Korrigera SQL-satsen som ska lösas:ORA-01799:en kolumn får inte vara yttre sammanfogad med en underfråga

Det borde fungera om du byter detta till 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
                                )

Du förlorar dock egenskaperna för 'vänster yttre sammanfogning', så du skulle också vilja lägga till:or fx.ftf_validitystartdate is null . Jag antar att v_CurrentDate kommer från "p". Det är alltid en bra idé att använda tabellalias före kolumnnamn.

Jag ifrågasätter dock om underfrågan verkligen behövs. Det behövs bara när det finns mer än en post som uppfyller villkoren i underfrågan. Annars tror jag att du bara kan ändra on klausul ska vara:

    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. java.sql.SQLEundantag:ORA-01843:inte ett giltigt månadsfel

  2. PHP kan inte ansluta till mysql via python

  3. lista alla kolumnnamn

  4. Kan någon förklara denna fråga?