2013-03-19 23 views
6

: Her bir takıma kaç oyuncunun ait olduğunu nasıl sayarsınız?SEÇ COUNT bire çok ilişkisi genelinde 1-∞ ilişkisi (takım oyuncusu) ile iki tablo</p> <p><strong>oyuncu</strong></p> <p>ve</p> <p><strong>takım</strong></p> <p>için

Başarısız girişimi:

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

Lütfen uygun etiketi (Oracle, SQL Server, MySQL, vb.) Ekleyerek hedeflediğiniz RDBMS'yi belirtin. Evrensel olarak desteklenmeyen dil veya ürün özelliklerinden yararlanan cevaplar olabilir. Ayrıca, belirli bir RDBMS ile etiketleyerek, sorunuzu yanıtlamak için daha uygun olan kişilerden dikkat çekebilirsiniz. – Taryn

+0

Evet. MySQL: SQL'in bu durumda çok genel olduğunu varsaydığı için bu bir fark yaratmayacaktı – Stumbler

+1

Doğrudan sql olabilir, ancak kullandığınız rdbms'i her zaman belirtmelisiniz. :) – Taryn

cevap

16

bazı takımlar atanmış oyuncu yoksa

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

Doğru sonuç, etkinliği verecektir deneyin. Bunun için sqlfiddle bakın (3. takımın oyuncuları yok).

+0

WHERE not JOINs kullanarak aynı sonucu elde edebilir misiniz? – f1ames

+0

@ f1ames Bunun nedeni nedir? – peterm

+0

Merak ve ben JOIN'ler üzerinden WHEREs kullanmayı tercih ediyorum. Artı 3 tablo birleştiren karmaşık bir sorgu var ve birleştirmek ile yeni sorgu oluşturmadan daha kolay değiştirmek için :) – f1ames

İlgili konular