2016-08-09 60 views
2

Ich habe die folgenden 4 Tabellen.MYSQL Left-Join Tabelle Auswählen von Daten Problem - Logischer Fehler

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] 

Ich versuche, jede Debatte Gruppe zu wählen, mit jeder Stakeholder-ID, Namen der Stakeholder-ID und der Zählung dieser Stakeholder zu dieser Debatte, wo der starter_pack_id eine gewisse Werte gleich. Zum Beispiel haben diese gezeigt werden, auch wenn die Zahl 0 oder NULL-Werte vorhanden sind

Das erwartete Ergebnis dieser wird wie folgt ..

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

Das Problem ist, dass es isn‘ t zeigt die Debatten, die nicht verwendet wurden in der Datenbank, die ich benötigte. Was muss ich im folgenden Code ändern, um diese Informationen abzurufen?

Unten ist mein Versuch ...

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 

Antwort

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