2011-10-21 2 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 

두 테이블을 어떻게 연결합니까?

+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