2011-10-21 13 views
1

アソシエーションテーブルを使用するテーブルに参加しようとすると助けが必要です。アソシエーションテーブルに左寄せ

私は、ユーザーテーブル

Users Table 
user_id 
user_name 

Association Table 
user_id 
project_id 

Project Table 
project_id 
project_name 

を持っている私は、彼らが関連付けられているプロジェクトのユーザーカウントをプルする必要があります。

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 

2つのテーブルを関連付けるにはどうすればよいですか?

+0

クエリはそのまま動作するはずです(少し改善することはできますが)。ここで何が問題なの? – Jon

+0

何が間違っていますか? –

答えて

1

を2加入:

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 

あなたがより速くあなたができることをしたい場合:

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

これはうまくいきましたが、ジョインがより複雑になり、その時間が個々のクエリの合計よりも長くなったため、ページがスピードアップしませんでした。ご協力いただきありがとうございます。 – Thom

+0

@Thom、クエリを高速化するために更新されました。 – Johan

0

は、私はあなたが何かを行うことができると思う:あなたは、プロジェクトやユーザを関連付けたい場合は、あなたがする必要がある

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 
関連する問題