Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

WD9 34j - jointure externe

5 réponses
Avatar
I.G.LOG
Bonjour,



Je "trime" une nouvelle fois sur les jointures externes. Voici une requète
qui ne me renvoit pas ce que je veux:

J'ai deux fichiers liés INVART ---- 1-n ------ INVCB. Je voudrais
recupérer l'identifiant du 1er même s'il n'a pas de correspondance dans le
2eme. J'utilise donc un left outer join comme suit:



select INVART.IDINVART,INVCB.IDINVCB from INVART left outer join INVCB on
(INVCB.IDINVART = INVART.IDINVART and INVCB.IDARTCBARR = 11379) where
INVART.IDINVENT = 9 and INVART.IDARTICLE = 5268 and INVART.ETAT = 1



cette requete me renvoie un résultat UNIQUEMENT si il y a une ligne dans
INVCB correspondant à la condition

"INVCB.IDINVART = INVART.IDINVART and INVCB.IDARTCBARR = 11379"

alors que dans le fichier INVART il y a bien une ligne satisfaisant a la
condition du

"INVART.IDINVENT = 9 and INVART.IDARTICLE = 5268 and INVART.ETAT = 1"

Le left outer join ne devrait il pas dans tous les cas me renvoyer un
résultat IDINVART et null pour INVCB (dans le cas ou le outer join n'est pas
satisfait bien sur)



... ou c'est moi qui déraille ????



Merci à tous

5 réponses

Avatar
I.G.LOG
Oublié de préciser, je suis en HF classique
Avatar
I.G.LOG
Aucun avis sur la question ?
Avatar
ManuPavy
I.G.LOG a écrit :
8< 8<

cette requete me renvoie un résultat UNIQUEMENT si il y a une ligne dans
INVCB correspondant à la condition

"INVCB.IDINVART = INVART.IDINVART and INVCB.IDARTCBARR = 11379"

alors que dans le fichier INVART il y a bien une ligne satisfaisant a la
condition du

"INVART.IDINVENT = 9 and INVART.IDARTICLE = 5268 and INVART.ETAT = 1"

Le left outer join ne devrait il pas dans tous les cas me renvoyer un
résultat IDINVART et null pour INVCB (dans le cas ou le outer join n'est pas
satisfait bien sur)



oui, seulement, est ce que hyperfile gere ce genre jointure (condition
sur un champ), ne remplace-t-il pas la condition de jointure par un
filtre (where) ?
Sinon, une idée pour contourner serait de faire un union :

select ...
from INVART left outer join INVCB on INVCB.IDINVART = INVART.IDINVART
where ...
union distinct
select ...
from INVART inner join INVCB on INVCB.IDINVART = INVART.IDINVART
where ...
and INVCB.IDINVART = INVART.IDINVART

mais c'est sur qu au niveau optimisation, c'est pas terrible.

Qu en dit le support technique ? il serait bon d'avoir ce genre de retour.

Manu
Avatar
ManuPavy
ManuPavy a écrit :
I.G.LOG a écrit :

8< 8<

cette requete me renvoie un résultat UNIQUEMENT si il y a une ligne dans
INVCB correspondant à la condition

"INVCB.IDINVART = INVART.IDINVART and INVCB.IDARTCBARR = 11379"

alors que dans le fichier INVART il y a bien une ligne satisfaisant a la
condition du

"INVART.IDINVENT = 9 and INVART.IDARTICLE = 5268 and INVART.ETAT = 1"

Le left outer join ne devrait il pas dans tous les cas me renvoyer un
résultat IDINVART et null pour INVCB (dans le cas ou le outer join
n'est pas
satisfait bien sur)




oui, seulement, est ce que hyperfile gere ce genre jointure (condition
sur un champ), ne remplace-t-il pas la condition de jointure par un
filtre (where) ?
Sinon, une idée pour contourner serait de faire un union :

select ...
from INVART left outer join INVCB on INVCB.IDINVART = INVART.IDINVART
where ...



J'ai oublié la condition de la premiere requete :

"and NVCB.IDINVART is null"

union


(distinct)
select ...
from INVART inner join INVCB on INVCB.IDINVART = INVART.IDINVART
where ...
and INVCB.IDINVART = INVART.IDINVART

mais c'est sur qu au niveau optimisation, c'est pas terrible.

Qu en dit le support technique ? il serait bon d'avoir ce genre de retour.

Manu


Avatar
I.G.LOG
Merci de la réponse
Je vais tout de même contacter le ST. Je vous tiens au courrant de leur
réponse (si il y a)