2011-03-26 4 views
1

J'ai deux tables. La table de noms a une clé étrangère nommée 'catégories'. L'autre table est 'categories' qui contient le nom des catégories. La table de noms référence une catégorie dans la table des catégories.Comment joindre deux tables ensemble en SQL?

J'utiliser ceci:

$categories = "SELECT name, COUNT(*) category"; 
$number_of_categories = "SELECT category, COUNT(1) FROM name GROUP BY category"; 

Comme vous pouvez le voir, je fais deux instructions select. J'ai entendu que joindre des tables peut faire de la magie, s'il vous plaît apprenez-moi comment faire cela dans une déclaration SELECT.

Fondamentalement, je veux sélectionner toutes les lignes de la table de catégories, puis compte le nombre d'instances de chaque catégorie dans la table de noms.

+0

Y a-t-il un 'FROM' absent dans l'instruction 1? Pouvons-nous voir le schéma complet des 2 tables? –

Répondre

3
SELECT c.name, COUNT(n.category) AS count_in_name_table 
FROM categories c 
LEFT JOIN name n ON n.category = c.name 
GROUP BY c.name 
+0

Nombre total de catégories manquant? – Andomar

+0

@Andomar - Je travaille sur la dernière phrase "Fondamentalement, je veux sélectionner toutes les lignes de la table de catégorie, puis compte le nombre d'instances de chaque catégorie dans la table de noms." Mais c'est un peu une question confuse. –

1

Vous pouvez compter le nombre de noms dans une sous-requête:

select category.name 
,  (
     select count(*) 
     from category 
     ) as CategoryCount 
,  (
     select count(*) 
     from name 
     where name.category = category.name 
     ) as NameCount 
from category 
1

Si l'on suppose que le nom de la table de la catégorie est « Catégorie » (avec nom_catégorie et category_id) et le nom de la table de nom est « nom » (avec name_id et category_id):

SELECT C.category_name, COUNT(N.name_id) FROM Category C 
LEFT JOIN Name N ON C.category_id=N.category_id 
GROUP BY C.category_name 

Le groupement vous permet de compter toutes les entrées de nom par nom de la catégorie.

0

Vous avez probablement un mauvais design.

  • Le tableau de nom a une clé étrangère 'catégories'.
  • La table 'categories' contient les noms des catégories.
  • La table name référence une catégorie dans le tableau des catégories.

Les deux tables se réfèrent-elles les unes aux autres? Ou est-ce juste un résultat des noms communs «nom» et «catégorie»?

Si vous avez une relation 1:1, cela signifie que chaque catégorie a un nom et chaque nom une catégorie, vous les placez dans une table.

Si vous avez une relation 1:n, une catégorie est liée à plusieurs noms, la relation sera spécifiée dans la table de catégories. Si c'est une relation n:1, l'inverse. Je suppose que nous avons besoin de quelques exemples de données ou d'autres explications pour être d'une aide précieuse.