REJOIGNEZ Question : Corriger l'Instruction SQL à résoudre : ORA-01799: une colonne ne peut pas être extérieur-joint à une sous-requête
Comme vous le voyez ci-dessous; comment puis-je mettre en œuvre fx.ftf_validitystartdate= ... ces lignes de valeur depuis oracle ne me permet pas de le faire comme ci-dessous
.
select * from acc_accounts acc
join kp_paramcore p on
acc.account_no = p.accountnum
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'
and fx.ftf_validitystartdate= (SELECT MAX(ff.ftf_validitystartdate)
FROM ftf_rates ff
WHERE ff.status = 'A'
AND ff.statusrec = 'A'
AND v_CurrentDate BETWEEN ff.systemstartdate AND ff.systemfinishdate AND ff.currencycode = acc.currencsw_kod
)
And
manquant aprèsfx.status= 'A'
dans votre copier-coller de la requête?- fixe. je vous remercie..
- Oracle version?
- version oracle 10g et doit fonctionner aussi sur 11g
- Je suppose que vous êtes absent une
on
ainsi après lakp_paramcore
rejoindre? - fixe. je vous remercie. Désolé pour le raté parties puisque je ne les ai porté pour exprimer la ligne où je reçois le message d'erreur.
- Désolé, je ne peux pas poster une réponse pour vous. Peut-être CTE expressions de mots, mais je n'ai pas essayer car la CTE est uniquement disponible à partir de 11g. Vous pouvez essayer de créer une vue que la doc indique.
- D'expressions de table communes étaient disponibles longtemps avant de Oracle 11g (je pense qu'ils ont introduite dans 9.1 peut-être même plus tôt - mais ils sont certainement disponibles dans 10.x). 11.2 introduit récursive expressions de table communes qui ne sont pas nécessaires dans ce cas.
- merci de consulter ma réponse. Merci de corriger mon commentaire.
Vous devez vous connecter pour publier un commentaire.
Je publie la solution de contournement avec CTE et testé uniquement dans Oracle 11g.
Pour faire des test, j'ai créer ce schéma:
En ce moment j'ai la force d'erreur avec cette requête:
Et maintenant je réécriture de la requête avec CTE:
Cette deuxième requête renvoie des résultats justes.
Je réécrire votre requête avec CTE:
Avis, testé uniquement dans Oracle 11g. Voir @a_horse_with_no_name commentaire:
Cela devrait fonctionner si vous passez à un
where
clause:Cependant, vous perdez la " jointure externe gauche caractéristiques, de sorte que vous aussi, vous avez envie d'ajouter:
or fx.ftf_validitystartdate is null
. Je suppose que v_CurrentDate vient de "p". C'est toujours une bonne idée d'utiliser des alias de table avant les noms de colonne.Cependant, j'question de savoir si la sous-requête est vraiment nécessaire. Il est seulement nécessaire quand il y a plus d'un enregistrement qui remplit les conditions à l'intérieur de la sous-requête. Sinon, je pense que vous pouvez simplement changer la
on
clause: