2017-05-16 4 views
0

왼쪽 테이블에서 모든 행을 반환하지 않는 3 개 테이블에, 카운트 가입 특별한 사람이없는 지역을 포함하여 각 지역의 특별 인의 내가 왼쪽으로 할 경우왼쪽 외부 내가이 3 개 테이블이

같이, 지역과 사람의 조인

select a.id as idArea, count(p.id) as count 
from areas a 
left join persons p on p.area_id = a.id 
group by a.id; 

이 잘 작동; 사람이없는 영역이 나타나고 개수가 0입니다.

동일한 영역에 모두 2 개의 항목 만있는 special_persons 테이블에서 동일한 작업을 수행하는 방법이 분명하지 않습니다.

나는 다음과 같은 시도 :

select a.id as idArea, count(sp.id_person) as count 
from special_persons sp, areas a 
left join persons p on p.area_id = a.id 
where p.area_id = a.id 
and sp.id_person = p.id 
group by a.id; 

그리고 만에 2 특별한 사람을 가지고 일어나는 지역, 그리고 점점 계속하려면 2

의 수와, 1 개 행을 반환 의 목록이 모두 영역입니다. 하위 쿼리를 사용해야합니까? 다른 가입? 나는 그것에 대해 어떻게 가야할지 모르겠다. 당신은 다른 왼쪽을 추가 할 수 있습니다

+0

. 또한'where.' 절에 'p.area_id = a.id'가 있습니다. 왼쪽 대신 join inner를 만듭니다. –

답변

1

Special_Persons 테이블에 조인 : 당신은 OLED를 혼합하고 새로운 구문을 가입

select a.id as idArea, count(p.id), count(sp.id_person) 
from areas a 
left join persons p on p.area_id = a.id 
left join special_persons sp on sp.id_person = p.id 
group by a.id; 
+0

많은 도움을 주셔서 감사합니다. 답은 내가 누락 된 부분이었습니다. 덧붙여서 여기 또 다른 좋은 설명을 발견했습니다. http://wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN –