2013-03-19 14 views
6

Na dwóch tablicachSELECT COUNT poprzek jeden-do-wielu relacji

player

i

zespołu

z relacji 1-∞ (odtwarzacz do zespołu): jak policzyć, ilu graczy należy do każdej drużyny?

Nieudana próba:

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

Podaj docelowy RDBMS, dodając odpowiedni znacznik (Oracle, SQL Server, MySQL itp.). Mogą istnieć odpowiedzi, które wykorzystują cechy języka lub produktu, które nie są powszechnie obsługiwane. Ponadto, poprzez oznaczenie go konkretnym RDBMS, twoje pytanie może zwrócić uwagę ludzi lepiej dopasowanych do odpowiedzi na to pytanie. – Taryn

+0

No jasne. Jego MySQL: założono, że SQL był tak ogólny w tym przypadku, że nie miałoby to żadnego znaczenia. – Stumbler

+1

Może to być zwykły sql, ale zawsze powinieneś określać rdbms, którego używasz. :) – Taryn

Odpowiedz

16

Spróbuj

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

To daje prawidłowy wynik zdarzenia jeśli niektóre zespoły nie mają przypisanych graczy. Zobacz do tego sqlfiddle (drużyna 3 nie ma graczy).

+0

Czy możesz osiągnąć ten sam wynik, używając GDZIE nie ma DOŁĄCZYĆ? – f1ames

+0

@ f1ames Jaki jest tego powód? – peterm

+0

Ciekawość i wolę używać GDZIE nad JOINami. Dodatkowo mam skomplikowaną kwerendę łączącą 3 tabele i łatwiej ją modyfikować niż tworzyć całe nowe zapytanie z łączeniami :) – f1ames