sql >> Database teknologi >  >> RDS >> Oracle

JOIN-problem:Ret SQL-sætningen, der skal løses:ORA-01799:en kolonne må ikke være udvendig forbundet med en underforespørgsel

Det burde virke, hvis du skifter dette til 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
                                )

Men du mister egenskaberne 'venstre ydre sammenføjning', så du vil også tilføje:or fx.ftf_validitystartdate is null . Jeg gætter på, at v_CurrentDate kommer fra "p". Det er altid en god idé at bruge tabelaliasser før kolonnenavne.

Jeg stiller dog spørgsmålstegn ved, om underforespørgslen virkelig er nødvendig. Det er kun nødvendigt, når der er mere end én post, der opfylder betingelserne i underforespørgslen. Ellers tror jeg, at du bare kan ændre on klausul skal være:

    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. Hvordan får man det samlede antal resultater, når der er LIMIT i forespørgslen?

  2. Sådan får du adgang til MySQL med MySQL-rodbrugeren

  3. Opfølgning #1 på førende wildcard-søgninger

  4. Er fletteerklæring tilgængelig i MySQL