2013-06-20 5 views
-3

Je m'excuse à l'avance si cela peut sembler simple car mon devoir doit être passé dans 2 heures et je n'ai pas assez de temps pour faire d'autres recherches car j'ai une autre tâche en attente à être soumis ce soir. Je connais seulement les commandes de base de MYSQL et pas ces types. Et c'est l'une des dernières questions laissées sans réponse et qui me rend dingue même si j'ai déjà lu la documentation JOIN. S'il vous plaît aider.MySQL Requête pour 4 tables différentes

Dire que j'ai 4 tables

_______________  _______________  _______________ _______________ 
| customers | |  orders | | ordered_items | | products | 
|_______________| |_______________| |_______________| |_______________| 
|(pk)customer_id| | (pk)order_id | | (pk)id  | |(pk)product_id | 
| first_name | |(fk)customer_id| | (fk)order_id | |  name  | 
| last_name | |  date  | |(fk)product_id | | description | 
| contact_no | |    | | quantity | |  price  | 
|_______________| |_______________| |_______________| |_______________|  

Comment pourrais-je être en mesure d'interroger tous les produits commandés par (par exemple: customer_id = « 5 »)

Je ne connais que SQL de base comme les requêtes avant droite sur 1 table et joint de 2 différents, mais puisque ses 4 tables différentes ont des relations différentes les unes aux autres, comment pourrais-je obtenir tous les produits commandés par un identifiant de client particulier? Parce que c'est comme obtenir tous les produits de produits commandés où order_id = (* commandes par customer_id = 5).

Mais que peut-être un optimisé et la meilleure façon pratique à faire ce type de requête

+3

Avez-vous regardé dans 'JOINs '? –

+0

@DaneHillard .. Oui, mais pour l'instant, je ne peux que comprendre clairement et créer des requêtes allant de 2-3 tables différentes, mais je dois encore apprendre ce type de scénario. Je ne suis pas un expert et j'étudie toujours à l'université. - Aussi, il est difficile d'avoir des downvotes sur quelqu'un qui pose une question réelle dans une perspective d'étudiant .. Je ne peux pas comprendre cela en un jour, je suis juste nouveau à ce sujet. – GitKidd

+2

@GitKidd: Ce forum a pour but d'aider ceux qui ont fait preuve de diligence raisonnable avant de poser des questions. Cette question est assez fondamentale, et il est difficile de supposer que vous avez effectivement essayé quelque chose à moins que vous ne présentiez un code raisonnable. – PinnyM

Répondre

1

Vous ne devez joindre 3 tables - orders, order_items et products:

SELECT DISTINCT products.* 
FROM products 
JOIN order_items USING (product_id) 
JOIN orders USING (order_id) 
WHERE orders.customer_id = 35 

Comme beaucoup l'ont dit , vous feriez vous-même une grande faveur en apprenant sur le tableau JOINS. Il n'y a pas beaucoup de différence dans la syntaxe entre joindre 2 tables pour rejoindre 4 ou plus.

SQLFiddle est une ressource hautement recommandée pour pratiquer et partager vos requêtes.

+0

@ MarkBannister .. yup, c'est ce que j'essayais de penser aussi :) – GitKidd

+0

merci beaucoup. Je ne suis peut-être pas encore familier avec la syntaxe DISTINCT et USING car je ne les ai jamais utilisées dans une requête avec JOINS et d'autres syntaxes qui sont incluses dans la requête mais maintenant qu'il y a un exemple de code, j'ai mieux compris comment atteindre les résultats que je voulais .. Merci beaucoup. – GitKidd

+0

@GitKidd: 'USING' est pour les jointures naturelles, où les colonnes correspondantes dans les tables associées ont le même nom. Une approche plus conventionnelle est d'utiliser 'ON table1.some_column = table2.other_column', qui fonctionne même lorsque les noms de colonnes ne sont pas identiques. – PinnyM

1

Ceci est un commentaire car vous semblez être nouveau dans SQL. Vous devez apprendre la syntaxe de base pour les requêtes (c'est pourquoi vous obtenez downvoted).

Mais vous posez aussi des questions sur la forme. La structure des données est en fait assez bien présentée. J'ai deux commentaires. Tout d'abord, vous devez être cohérent sur la façon dont vous nommez les colonnes d'ID. Pour Ordered_Items, l'ID doit être ordered_item_id. Deuxièmement, vous devez éviter d'utiliser des mots spéciaux SQL pour les noms de colonnes et les noms de tables. Au lieu de date, utilisez OrderDate.

+0

merci monsieur. J'apprécie vos conseils et je tiens à vous remercier pour votre commentaire. - Je viens de mettre (date) et (id) parce que je manque vraiment de temps pour spécifier l'ensemble des attributs de la table. voudrais s'excuser de ne pas utiliser les meilleures pratiques. :) – GitKidd

Questions connexes