2011-10-21 3 views
1

J'ai besoin d'aide pour essayer de rejoindre une table qui utilise une table d'association.Left Joindre une table d'association

J'ai un utilisateur tableau

Users Table 
user_id 
user_name 

Association Table 
user_id 
project_id 

Project Table 
project_id 
project_name 

je dois tirer un utilisateur et le nombre de projets auxquels ils sont associés.

SELECT u.user_name, COUNT(p.project_id) projects 
FROM users u 
LEFT JOIN association a ON u.user_id = a.user_id 
GROUP BY u.user_name 

Comment associer les deux tables?

+0

La requête devrait fonctionner telle quelle (bien qu'elle puisse être améliorée un peu). Quel est le problème ici? – Jon

+0

Qu'est-ce qui ne va pas ?? –

Répondre

1

Si vous souhaitez associer les projets et les utilisateurs, vous devez faire 2 Assemble:

SELECT u.user_name, COUNT(p.project_id) projects 
FROM users u 
LEFT JOIN association a ON u.user_id = a.user_id 
LEFT JOIN projects p ON p.project_id = a.project_id 
GROUP BY u.user_name 

Si vous voulez plus vite que vous pouvez faire :

SELECT u.user_name, COUNT(a.project_id) projects 
FROM users u 
LEFT JOIN association a ON u.user_id = a.user_id 
GROUP BY u.user_name 
+0

Merci, cela a fonctionné, mais n'a pas accéléré ma page parce que les jointures étaient plus compliquées donc son temps était plus long que la somme des requêtes individuelles. Merci de votre aide. – Thom

+0

@Thom, mis à jour pour répondre afin d'accélérer la requête. – Johan

0

Je pense que vous pouvez faire quelque chose comme:

SELECT 
    Utbl.user_name, 
    NumTbl.numProjects 
FROM 
    UsersTable Utbl, 
    (SELECT 
     Atbl.user_id, 
     COUNT(*) AS numProjects 
    FROM 
     ProjectTable Ptbl, 
     AssociationTable Atbl 
    WHERE 
     Utbl.user_id = Atbl.user_id AND 
     Atbl.project_id = Ptbl.project_id) NumTbl 
WHERE 
    Utbl.user_id = NumTbl.user_id 
Questions connexes