Wie muss ich joinen?

Fanatico

Mitglied
Hallo!

Ich habe 2 Tabellen:

Nr.1 Teams: Id und Name

Nr. 2 Spieler: Id, Name, Team_id

Jedes Team kann 0 oder n Spieler haben.

Nun möchte ich wissen, wie ich rausbekomme, welche Teams nicht 16 Spieler haben, also auch 0.

Doch wie funktioniert das?
 
Du beginnst mit den Teams, denn die willst Du haben. Dann verwendest Du einen LEFT JOIN, denn dieser lässt jeden Datensatz der ersten Tabelle in der Ergebnistabelle, auch wenn er keine Entsprechung in der zweiten Tabelle hat. Gibt es für einen Datensatz keinen entsprechenden in der zweiten Tabelle, werden deren Felden mit NULL gefüllt, auch wenn sie als NOT NULL deklariert sind.
Du gruppierst dann nach dem Primärschlüssel der Teams.
Nun suchst Du Dir in der zweiten Tabelle ein Feld, welches Du in der Tabellendefinition als NOT NULL deklariert hast. Dieses zählst Du mit COUNT. Damit erhältst Du die Anzahl Spieler, die in dem jeweiligen Team sind und legst es in einem Alias-Feld ab. Mit HAVING kannst Du nun die Temas ausschließen, die nicht die gewünschte Anzahl Spieler haben.

Gruß hpvw
 
Wäre es möglich das ganze einfach mal als Abfrage hinzuschreiben?

Bisher habe ich mir folgendes zusammengebaut:

SELECT team FROM teams t LEFT JOIN spieler sp ON t.id=team_id GROUP BY (team_id) HAVING COUNT(sp.id) = 16

Hier kommen eben die TEams raus, die 16 Spieler haben, doch ich möchte ja das Gegenteil und die Anzahl der Spieler
 
Zuletzt bearbeitet:
Dann mach doch
Code:
...
HAVING COUNT(sp.id) != 16
Du willst ja etwas ausschließen und nicht einschließen.

Gruß hpvw
 
hpvw hat gesagt.:
Dann mach doch
Code:
...
HAVING COUNT(sp.id) != 16
Du willst ja etwas ausschließen und nicht einschließen.

Gruß hpvw

Hab ich schon probiert, dann zeigt er mir aber nur ein Team an und net alle die nicht 16 Spieler haben. So ganz akn doch die ganze Abfarge net stimmen.

Und wie wird mir zusätzlich die Anzahl er Spieler angezeigt?
 
Dann zeig doch erstmal den Output von folgender Abfrage:
Code:
SELECT 
  team,
  COUNT(sp.id) AS spielerAnzahl
FROM teams t 
LEFT JOIN spieler sp 
  ON t.id=sp.team_id 
GROUP BY (t.id)
Gruß hpvw

PS: Du solltest nach dem Primärschlüssel des Teams gruppieren und nicht nach dem Fremdschlüssel in der Spielertabelle.
 
Zurück