2012-10-01 3 views
0

J'essaie d'avancer ma connaissance de mysql de "je peux le faire fonctionner" à "je peux le faire fonctionner correctement". Je travaille avec des jointures en ce moment et je me demandais la meilleure façon de faire ce qui suit:Bonne façon de rejoindre les tables MYSQL

J'ai 2 tableaux "articles" et "catégories". A l'intérieur de la table "items" j'ai un champ appelé category qui sera lié à la clé primaire de la table "categories" cid. Quelle est la meilleure façon de faire cela? Voilà comment je l'ai toujours fait, mais je pense qu'il est pas la meilleure façon par tout moyen

SELECT C.something, C.soemthing 2 FROM categories C, items I WHERE C.cid=I.category AND C.categoryName='New' 
+0

Il fonctionne très bien dans mon code et je l'ai utilisé de cette façon de joindre des tables depuis des années. Que voulez-vous dire que cela ne fonctionne pas? Je sais que ce n'est pas la meilleure façon de savoir comment j'ai appris quand j'ai commencé à programmer, donc c'est une mauvaise habitude maintenant. – Dave

Répondre

4

Votre requête est déjà correcte mais je recommande d'utiliser le format ANSI SQL-92

SELECT C.something, C.soemthing2 
FROM categories C INNER JOIN items I 
       on C.cid=I.category 
WHERE C.categoryName='New' 

question, qu'essayez-vous d'accomplir?

+0

J'essaie juste d'écrire la requête la plus optimisée. Je me sens comme la façon dont je l'écris est trop générique pour être le "meilleur moyen" de le faire – Dave

+0

non, vous le faites très bien. mais vous utilisez l'ancienne syntaxe de rejoindre. –

+0

Ok, cool, je voulais juste confirmer. Merci beaucoup – Dave

0

Votre requête retournerait le jeu de résultat correct, mais ce qui suit est plus lisible:

SELECT C.something, C.soemthing 2 
FROM categories C 
INNER JOIN items I ON C.cid = I.category 
WHERE C.categoryName='New'; 
+0

Votre requête est bonne, mais -1 pour l'explication trompeuse. La syntaxe de jointure plus ancienne mènera au même plan de requête, donc elle n'est pas * inefficace *, elle est simplement plus sujette aux erreurs et moins lisible. –

+0

J'avais l'impression que tout le produit cartésien était retourné et ensuite filtré en utilisant la méthode OP. Merci pour le tutoriel, j'ai éditer mon post pour refléter cela. –