2013-06-14 2 views
1

두 가지를 관련시키는 코스, 강사 및 테이블이있는 코스 시스템을 구축 중입니다.여러 개의 조인을 사용하는 MySQL COUNT()

Symplified 테이블 instructors :

id | name | ... 

Symplified 테이블 courses :

id | name | instructors_needed | ... 

Symplified 테이블 link는 :

id | course_id | instructor_id 

나는 관련된 강사의 이름을 가져 오기 위해 다음과 같은 쿼리를 생성 ~에 관절 코스 :

SELECT i.name, c.name, c.instructors_needed FROM courses c 
LEFT OUTER JOIN 
    link 
ON c.id = link.course_id 
LEFT OUTER JOIN 
    instructors i 
ON link.instructor_id = i.id 

잘 작동합니다. 나는 각 코스에 강사의 수를 찾으려면 다음 쿼리를 생성 :

SELECT COUNT(i.name) as number, c.id, c.name, c.instructors_needed FROM courses c 
LEFT OUTER JOIN 
    link 
ON c.id = link.course_id 
LEFT OUTER JOIN 
    instructors i 
ON link.instructor_id = i.id 
GROUP BY c.ID 
나는 특별한 경우를위한 강사에 대한 모든 세부 사항을 얻기 위해, 두 개의 쿼리를 결합하려는

뿐만 아니라에 대한 강사의 총 수 코스 및 필요한 강사 수 어떻게해야합니까? 나는 GROUP BY가 여기에서 문제라는 것을 이해한다. 검색했지만 3 대신 2 개의 테이블로만 예제를 찾을 수 있었고, 어떻게 든 3 개의 테이블을 찾을 수 없었습니다.

정말 감사드립니다. 감사합니다.

+2

엄지 손가락의 규칙 : 당신이 해제 집계 필드를 사용의 필요성에 올 때마다 집계들 (열 일명 기능, 계산/합계/평균처럼 합산으로 사용되지 않음), GROUP-BY 문의 집계되지 않은 모든 필드를 나열하십시오. 따라서 대부분의 경우 GROUP BY c.ID, c.name, c.instructors_needed를 작성해야합니다 (물론 이것은 "무능력 해지다"이고 GROUP BY는 HAVING과 함께 여러 가지 유용한 용도가 있습니다) – Najzero

+0

Hello Najzero, 응답 해 주셔서 감사합니다! 나는 당신의 제안을 시도했다. 그러나 이것은 각 코스에 대해 최대 1 명의 강사 이름을 제공한다. 그러나 @Edper의 해결책이 트릭을 만들었습니다. – Jasper

답변

3

시도 :

SELECT i.name, c.name, c.instructors_needed, Ctr.CourseCount FROM courses c 
LEFT OUTER JOIN 
link 
ON c.id = link.course_id 
LEFT OUTER JOIN 
    instructors i 
ON link.instructor_id = i.id 
LEFT OUTER JOIN 
    (SELECT link.course_id, COUNT(*) as CourseCount FROM link GROUP BY link.course_id) Ctr 
ON link.course_id = Ctr.course_id 
관련 문제