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)
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
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.
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
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
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.
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
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)
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)