2017-03-04 32 views
0

全体数:MYSQL私は3つのテーブル持っているアクティブなテーブル

person 
----------- 
person_id, active 

person_team 
----------- 
person_id, team_id, active 

team 
----------- 
team_id, active 

を私はactiveが各テーブルに真である各personからteamsの数を取得したいのですが。

は、これまでのところ私が持っている:

SELECT t.id, t.title, t.created_timestamp, COUNT(p_t.tag_id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id 
ORDER BY t.title 

これはチームと人のカウントを取得 - チームがアクティブになっているのが、人がアクティブであるかどうかを考慮していません。サブクエリまたは別のタイプの結合を使用する必要がありますか?

+0

いくつかのサンプルテーブルデータを提供 – Wanderer

+0

グループではないときにselectで 't.title、t.created_timestamp'をどのように選択できますか? – Utsav

答えて

1

あなたが参加する中でpersonテーブルを追加し、そのテーブルから列をカウントする必要があります。

SELECT t.id, t.title, t.created_timestamp, COUNT(p.id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
LEFT JOIN 
    person p ON p_t.person_id = p.id AND p.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id 
ORDER BY t.title 
1

あなたは、内側のサブ

ことで、列ではないグループの取得のための選択に参加する使用する必要があります
select k.id, t.title, t.created_timestamp, k.count from 
( SELECT t.id COUNT(p_t.tag_id) AS count 
FROM team t 
LEFT JOIN 
    person_team p_t ON p_t.team_id = t.id AND p_t.active = 1 
WHERE 
    t.active = 1 
GROUP BY t.id) k 
inner join team t on t.id = k.id 
関連する問題