2017-07-18 19 views
1

Dies scheint eine ziemlich häufige Frage hier zu sein, obwohl ich nicht in der Lage war, eine Lösung zu finden.mysql left join gibt keine Werte zurück

Ich habe drei Tabellen, matchup, matchup_options, matchup_votes

Auf schaffen, ein matchup erstellt wird, "n" matchup_options erstellt und matchup_votes sind leer, bis eine Abstimmung hinzugefügt wird.

Meine Abfrage gibt nur einen Wert zurück, obwohl ich zwei matchup_options habe, WEDER irgendetwas in der Tabelle matchup_votes. (Diese sollten 0 zurück, bis ein aktueller Eintrag Theres, das richtig zu zählen beginnen würde)

SELECT matchup.matchupID, matchup_option.player_id, player.name, player.abr, count(matchup_vote.player_id) votes FROM matchup 
      INNER JOIN matchup_option ON matchup_option.matchupID= matchup.matchupID 
      INNER JOIN player ON player.player_id = matchup_option.player_id 
      LEFT JOIN matchup_vote ON matchup_vote.player_id = matchup_option.player_id 
      GROUP BY matchup_vote.player_id; 

Und die Rückkehr:

matchupID player_id  name  abr  votes 
111   249   Name  SF   0 

Erwarteter Ertrag:

matchupID player_id  name  abr  votes 
111   249   Name  SF   0 
111   331   Name2  JS   0  

Thank you!

Antwort

2

Ihre group by Klausel ist falsch. Du gruppierst nach matchup_vote.player_id. Ich kann deine Quelldaten nicht sehen, aber das bedeutet, dass nur ein Spieler gewählt hat.

Ihre Abfrage sollte wie folgt aussehen:

SELECT 
    matchup.matchupID 
    , matchup_option.player_id 
    , player.name 
    , player.abr 
    , count(matchup_vote.player_id) votes 
FROM 
    matchup 
    INNER JOIN matchup_option 
    ON matchup_option.matchupID = matchup.matchupID 
    INNER JOIN player 
    ON player.player_id = matchup_option.player_id 
    LEFT JOIN matchup_vote 
    ON matchup_vote.player_id = matchup_option.player_id 
GROUP BY 
    matchup.matchupID 
    , matchup_option.player_id 
    , player.name 
    , player.abr 
+0

Ja das hat definitiv funktioniert. Wir wollen also im Wesentlichen den gesamten Datensatz gruppieren, nicht nur das einzelne Feld? – Nihat

+0

@Nihat: Nicht der gesamte Datensatz, nein. Nur was relevant ist. Das bedeutet normalerweise alles in der Select-Anweisung oberhalb der Aggregatfunktion. Denke darüber nach, wie du die Zählgruppen im echten Leben brechen würdest. Es ist das gleiche. Wenn Sie die Autos viel zählen möchten, zählen Sie sie als eine Gruppe. Sie können sie dann in Gruppen zerlegen, um was für ein Auto es sich handelt, und dann noch weiter nach Farbe. – Jacobm001

+0

@Nihat: Wenn Sie das Problem gelöst haben, denken Sie bitte daran, die Antwort zu akzeptieren, indem Sie auf das Kontrollkästchen klicken :) – Jacobm001

1

Sie eine GROUP BY matchup_vote.player_id tun;

Sie erhalten pro player_id eine Zeile.