INNER JOIN en cascade

elfifie Messages postés 19 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 17 octobre 2017 - 2 janv. 2009 à 12:41
elfifie Messages postés 19 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 17 octobre 2017 - 2 janv. 2009 à 16:59
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?
A voir également:

2 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
2 janv. 2009 à 14:01
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  


 
0
elfifie Messages postés 19 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 17 octobre 2017
2 janv. 2009 à 16:59
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;
0
Rejoignez-nous