2013-03-19 1 views
6

Für zwei TabellenSELECT COUNT über eine Eins-zu-viele-Beziehung

Spieler

und

Team

Mit einer 1-∞ Beziehung (Spieler zur Mannschaft): Wie würdest du zählen, wie viele Spieler zu jedem Team gehören?

fehlgeschlagen Versuch:

SELECT team.teamid, (SELECT COUNT(player.team) FROM player) 
FROM team 
LEFT JOIN player ON player.team = team.teamid 
+1

Geben Sie das gewünschte RDBMS an, indem Sie das entsprechende Tag (Oracle, SQL Server, MySQL usw.) hinzufügen. Es gibt möglicherweise Antworten, die Sprach- oder Produktfunktionen nutzen, die nicht allgemein unterstützt werden. Durch das Markieren mit einem bestimmten RDBMS erhält Ihre Frage möglicherweise auch die Aufmerksamkeit von Personen, die besser darauf antworten. – Taryn

+0

Oh sure. Sein MySQL: angenommen, dass das SQL in diesem Fall so generisch war, dass es keinen Unterschied machen würde – Stumbler

+1

Es könnte einfach sql sein, aber Sie sollten immer die von Ihnen verwendeten rdbms angeben. :) – Taryn

Antwort

16

SELECT t.teamid, COUNT(p.team) player_count 
FROM team t LEFT JOIN 
    player p ON p.team = t.teamid 
GROUP BY t.teamid 

SQLFiddle

Versuche wird es richtiges Ergebnis Ereignis geben, wenn einige Teams zugewiesen nicht-Player. Siehe dazu sqlfiddle (Team 3 hat keine Spieler).

+0

Können Sie dasselbe Ergebnis mit WHERE nicht JOINs erreichen? – f1ames

+0

@ f1ames Was ist der Grund dafür? – peterm

+0

Neugier, und ich bevorzuge mit WHEREs über JOINs. Außerdem habe ich eine komplexe Abfrage, die 3 Tabellen verbindet, und es ist einfacher, sie zu ändern, als eine ganz neue Abfrage mit Joins zu erstellen :) – f1ames