2010-06-26 4 views
0

J'ai deux tables, utilisateurs et classes. J'ai besoin de montrer le nombre de classes de chaque utilisateur avec l'ID d'utilisateur et je dois montrer ces utilisateurs aussi bien ... sans classes. comment le faire ..Requête DB simple

Répondre

2
SELECT Users.id, Users.username, COUNT(*) AS classes 
    FROM Users 
LEFT OUTER JOIN Classes ON User.fk_class_id = Classes.id 
     GROUP BY Users.id, Users.username 
+0

regroupement par class.id renverrait une erreur sur la plupart des bases de données, car users.username était pas dans le groupe par et étant sans fonction d'agrégation –

+0

merci .. .. .. –

0

Je pense qu'un sous-ensemble est probablement le moyen le plus facile d'y parvenir.

SELECT U.id, numClasses = (SELECT COUNT(1) FROM classes WHERE userID = U.id) 
    FROM Users U 
+0

Il est équivalent à la gauche de la réponse de Dex, bien que Dex est plus susceptible d'être efficace en fonction de l'optimiseur –

+0

Vous avez raison, je n'ai pas suivi la logique de la jointure externe gauche retournant les lignes multiples à compter, erreur de débutant sur mon partie. Pour une raison quelconque, je pensais que cela retournerait les utilisateurs par classe, ce qui ne sera pas le cas. – staticbeast

0
select a.user_name, a.user_id, count(b.class_name) 
from user as a 
left join class as b 
on a.class_id = b.id