2013-03-19 11 views
6

Per due tavoliSELECT COUNT attraverso uno-a-molti

giocatore

e

squadra

con un rapporto di 1-∞ (giocatore di squadra): come valuteresti quanti giocatori appartengono a ciascuna squadra?

tentativo fallito:

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

Specificare l'RDBMS di destinazione con l'aggiunta del tag appropriato (Oracle, SQL Server, MySQL, ecc.). Potrebbero esserci risposte che sfruttano il linguaggio o le caratteristiche del prodotto che non sono universalmente supportate. Inoltre, taggandolo con un RDBMS specifico, la tua domanda potrebbe ricevere attenzione da parte delle persone più adatte a rispondergli – Taryn

+0

Oh sicuro. Il suo MySQL: presupponeva che l'SQL fosse così generico in questo caso che non avrebbe fatto la differenza – Stumbler

+1

Potrebbe essere semplice SQL, ma dovresti sempre specificare gli rdbms che stai usando. :) – Taryn

risposta

16

Prova

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

vi darà corretto evento result se alcune squadre non hanno giocatori assegnati. Vedi sqlfiddle per quello (la squadra 3 non ha giocatori).

+0

Puoi ottenere lo stesso risultato utilizzando WHERE not JOINs? – f1ames

+0

@ f1ames Qual è il motivo? – peterm

+0

Curiosità, e preferisco usare WHEREs su JOINs. Inoltre ho una query in qualche modo complessa che unisce 3 tabelle ed è più facile modificarla rispetto alla creazione di un'intera nuova query con join :) – f1ames