2017-05-16 6 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人の特別な人を持っているために起こる地域で、1行を返し、2

のカウントは引き続き入手するためにすべてのエリアのリスト、サブクエリを使用する必要がありますか?別の参加ですか?私はそれについてどうやって行くのか分からない。あなたが別の左を追加することができます

+0

あなたはOLEDと新しい結合構文を混合しています。また、あなたの 'where'節に' p.area_id = a.id'があります。 –

答えて

1

Special_Personsテーブルへの結合:

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 –

関連する問題