2016-08-09 5 views
2

次の4つのテーブルがあります。MYSQL左結合テーブルデータの選択 - 論理エラー

1. DEBATES. 
    [ID, STARTER_PACK_ID] 
2. DEBATE_GROUPS. 
    [ID, DEBATE_ID, STAKEHOLDER_ID] 
3. DEBATE_STAKEHOLDERS. 
    [ID, STARTER_PACK_ID, NAME] 
4. DEBATE_STARTER_PACKS. 
    [ID] 

私はstarter_pack_idが特定の値に等しくなる議論にすべての利害関係者のID、利害関係者のIDの名前とその利害関係者の数と、すべての議論のグループを選択しようとしています。例えば、これらは、カウントが0またはNULL値は次のようにこの

期待される結果がで存在している場合でも、示されなければなら..

DEBATE_ID | STAKEHOLDER_ID | COUNT(Example) 
------------------------------------------- 
    1    1    2 
    1    2    1 
    1    3    3 
    2    1    4 
    2    2    1 
    2    3    2 

問題は「それがにISNということです私が必要としているのは、 のデータベースには使われていない議論を示しています。この情報を取得するには、以下のコードで何を変更する必要がありますか?以下は

...

SELECT 
    a.id, 
    a.name, 
    a.abbreviation, 
    b.debate_id, 
    IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq, 
    COUNT(b.stakeholder_id) AS freq 
FROM 
    debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id 
GROUP BY 
    a.id, b.debate_id 
HAVING 
    COUNT(*) < 3 
ORDER BY 
    a.id,b.debate_id,b.stakeholder_id 

答えて

1
SELECT 
    a.id, 
    a.name, 
    a.abbreviation, 
    d.id, 
    IF(COUNT(b.stakeholder_id) = 0, 0, COUNT(b.stakeholder_id)) AS total_freq, 
    COUNT(b.stakeholder_id) AS freq 
FROM 
    debate_stakeholders a LEFT JOIN debate_groups b ON b.stakeholder_id = a.id 
    RIGHT JOIN debates as d ON b.debate_id = d.id 
GROUP BY 
    a.id, b.debate_id 
HAVING 
    COUNT(*) < 3 
ORDER BY 
    a.id,b.debate_id,b.stakeholder_id 
私の試みです
関連する問題