2009-06-27 7 views
1

Pour un assignement je dois écrire SQL sur pour afficher Nom du client, la date de commande, ID produit, le tissu du produit, quantité commandée, et le prix unitaire. Cela doit être une jointure de 4 tables et doit être INNERJOIN utilisateur même si où peut être utilisé.requêtes MS Access Erreur de syntaxe dans FROM

Ce sont les tables impliquées.

Cus (CID, Nom, prénom, téléphone)
Commandes (OrdID, OrdDate, ShipDate, CID)
Manu (ManuID, Nom, Téléphone, Ville)
Prods (PRID, ManuID, Catégorie)
ProdFabric (PRID , Tissu, le prix)
Orderline (OrdId, PRID, Tissu, Qté)

signifie gras est une clé primaire ou partie d'une clé composite.

Voici la requête que j'ai entrée, mais je continue d'obtenir une erreur de syntaxe sur FROM et continue de mettre en évidence les commandes (après Cus INNERJOIN) pour une raison quelconque.

SELECT Last, OrdDate, Prods.PrID, Fabric, Qty, Price 
FROM Cus INNERJOIN Orders INNERJOIN Orderline INNERJOIN ProdFabric 
ON OrderLine.PrID=ProdFabric.PrID 
AND ON Orderline.Fabric=ProdFrabric.Fabric 
AND ON Cus.CID=Orders.CID 
AND ON Orders.OrdID=Orderline.OrdID; 

Qu'est-ce qui cause cela et comment puis-je le résoudre?

Répondre

0

Je ne pense pas « ET ON » existe comme vous l'utilisez dans votre requête.
Vous devez spécifier chaque jointure sur son propre.

SELECT ... 
FROM cus INNER JOIN orders ON cus.cid = orders.cid 
     INNER JOIN orderline ON orders.orderid = orderline.orderid 
... 

ou vous pouvez également spécifier la jointure dans la clause WHERE:

SELECT ... 
FROM cus INNER JOIN orders 
     INNER JOIN orderline 
... 
WHERE cus.cid = orders.cid 
    AND orders.orderid = orderline.orderid 
... 

également: INNER JOIN sont 2 mots

+0

Tentative de structurer comme vous l'avez dit. Même erreur encore. –

+0

Bien sûr ... n'a pas vu l'erreur plus évident ... INNER JOIN n'est pas en un seul mot ... Je mis à jour la réponse. – fretje

+0

Wow, merci beaucoup. Je vais essayer ça. –

1

MS Access nécessite AFAIK une prolifération Lisp de parenthèses pour prendre en charge plusieurs jointures.

  • Modifiez vos requêtes MS Access dans un autre éditeur qui prend en charge l'appariement de paren et la mise en surbrillance de la syntaxe, par ex. Notepad ++.
  • alias de table Utilisez pour garder vos requêtes plus courtes et plus faciles à gérer.

Avec les parenthèses, votre requête ressemblera à ceci:

SELECT c.Last 
     , o.OrdDate 
     , pf.PrID 
     , pf.Fabric 
     , ol.Qty 
     , pf.Price 
FROM ((Cus c 
     INNER JOIN Orders o ON c.CID = o.CID) 
     INNER JOIN Orderline ol ON o.OrdID = ol.OrdID) 
     INNER JOIN ProdFabric pf ON ol.PrID = pf.PrID; 
+0

Merci Adam. Je l'ai eu avec la parenthèse. Bien que, quand j'ajoute les noms de table avant le champ, il me demande d'entrer un paramètre, donc je l'ai omis. Voici ce que j'ai enfin, j'espère que c'est vrai. SELECT Dernière, OrdDate, Orderline.Prid, Orderline.Fabric, Qté, Prix FROM ((Cus INNER JOIN Commandes ON Cus.CID = Orders.CID) INNER JOIN Orderline ON Orders.OrdID = Orderline.OrdID) INNER JOIN ProdFabric ON Orderline.Fabric = ProdFabric.Fabric AND OrderLine.Fabric = ProdFabric.Fabric; –

+0

Ça me va, sauf que je ne sais pas pourquoi vous vous joignez deux fois à ProdFabric on Fabric. Pouvez-vous rejoindre ProdFabric sur PrID? Si vous avez vraiment besoin de vous joindre à Fabric, joignez-vous à PrID * et * Fabric comme ceci: INNER JOIN ProdFabric ON Orderline.PrID = ProdFabric.Prid AND Orderline.Fabric = ProdFabric.Fabric; A part ça, vous êtes prêt à partir! – bernie

+0

Bonne prise, fixe ça, merci! –