INNER JOIN en cascade

Signaler
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017
-
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017
-
Voila mon problème :
Je dispose de :
 - 1 table Utilisateur contenant Nom et Adresse
 - 1 table Achat contenant Nom et Id_Facture
 - 1 table Facture contenant Id_Facture et Date
 - 1 table CompoFacture contenant Id_facture et Id_LigneFacture
 - 1  table LigneFacture contenant Id_LigneFacture et ElementAchete

Je dois récuperer des infos sur l'ensemble de ces tables, j'ai un probleme avec le from et les inner join.
Voila ce que j'ai :
FROM LigneFacture INNER JOIN CompoFacture ON  LigneFacture.ID_LigneFacture = CompoFacture.ID_LigneFacture
INNER JOIN Facture ON CompoFacture.ID_Facture = Facture.ID_Facture
 INNER JOIN Achat ON  Facture.Id_Facture =Achat.ID_Facture)
INNER JOIN Utilisateur ON Achat.Nom=Utilisateur.Nom;

ça me retourne une erreur : "erreur de syntaxe(operateur absent)"
Est-ce que c'est un problème de parenthese? Comment les mettre?

2 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
26
Salut,

Oui il semble manquer une paranthese.
En plus les tables sont dans le mauvais ordre
il faut les prendre dans un ordre logique
sinon tu vas te retrouver avec aucun enregistrement
et ca va optimiser le plan d'execution de la requete

on prend les tables les plus restrictive ou les conditions sont presentes en premier ca evite de parcourir toutes les lignes des grandes tables (facture_detail)
car sur ta requete tu auras surement un filtre sur la facture






commence par facture, apres par exemple client et apres detail facture
(j'ai pas respecté tes noms) mais c'est facture qui sont gérée dans facture en premier
il y a peut etre besoin de left join (en fonction de ta base comment elle est remplie)


fait tes jointures avec access (assistant de requetes) pour avoir un positionnement propre des parentheses (je trouve bizarre qu'il faut des parentheses sur access alors que sql server il y a en pas besoin c'est le moteur des requetes qui veut ca)


bon sql  


 
Messages postés
19
Date d'inscription
samedi 27 décembre 2008
Statut
Membre
Dernière intervention
17 octobre 2017

Merci je n'avais pas pensé à l'assistant!

voila ça marche!

Pour info voila la soluce :

FROM Utilisateur INNER JOIN (Ligne_Facture INNER JOIN
((Facture INNER JOIN Achat ON Facture.ID_Facture=Achat.ID_Facture)
INNER JOIN CompositionFacture ON Facture.ID_Facture=CompositionFacture.ID_Facture) ON Ligne_Facture.ID_LigneFacture=CompositionFacture.ID_LigneFacture) ON Utilisateur.Nom=Achat.Nom_Utilisateur;