Verbindung zwischen zwei Tabellen

DennisHH30

Benutzer
Beiträge
8
Moin moin,
bin noch Anfänger und habe folgendes Problem:
Es geht um eine Fussballdatenbank.
Habe 2 Tabellen

Spieler
-Spieler_ID
-Spieler_Name
-Land
-Tore

Verein
-V_ID
-Name

Das Ergebnis soll eine Tabelle sein mit Spieler, Verein, Land, Tore und das ganze geordnet nach Toren absteigend.

Mein Ergebnis sieht bis dato so aus. Vielleicht kann mir jmd Tipps geben wie ich zu einem Ergebnis komme.

SELECT s.Spieler_Name, v.Name, s.Land, s.Tore
FROM Spieler AS s, Verein AS v
WHERE ??
ORDER BY s.Tore DESC

Danke im voraus
Dennis
 
Werbung:
Moin moin,
bin noch Anfänger und habe folgendes Problem:
Es geht um eine Fussballdatenbank.
Habe 2 Tabellen

Spieler
-Spieler_ID
-Spieler_Name
-Land
-Tore

Verein
-V_ID
-Name

Das Ergebnis soll eine Tabelle sein mit Spieler, Verein, Land, Tore und das ganze geordnet nach Toren absteigend.

Das geht so noch gar nicht. Du brauchst eine Verbidnungstabelle, welcher Spieler in welcher Mannschaft ist. Und es gibt weitere Probleme:

  • in welchen Spiel schoß er das Tor?
  • Spieler wechseln die Mannschaft, für welche Mannschaft schoß er das Tor?

Du brauchst noch einige Tabellen mehr. Und beschäftige Dich nebenbei mit sauberer JOIN-Syntax. Und als Anfänger rate ich Dir gleich von MySQL ab. Es gibt bessere Alternativen.
 
Ach dann ist also "Verein_has_Spiel" die Verbindungstabelle nehme ich an.
Verein_has_Spiel
-Verein_V_ID
-Spiel_Spiel_ID
-Tore

Wir beschäftigen uns gerade in der Schule mit MySQL-von daher führt da kein Weg dran vorbei :)
 
Ach dann ist also "Verein_has_Spiel" die Verbindungstabelle nehme ich an.
Verein_has_Spiel
-Verein_V_ID
-Spiel_Spiel_ID
-Tore

Wir beschäftigen uns gerade in der Schule mit MySQL-von daher führt da kein Weg dran vorbei :)

Mal so als 3-Minuten-Hack:

Code:
test=# create table spieler (id serial primary key, name text);
CREATE TABLE
Time: 7,564 ms
test=*# create table verein (id serial primary key, name text);
CREATE TABLE
Time: 20,238 ms
test=*# create table spieler_verein (id_spieler int references spieler, id_verein int references verein, von_bis daterange, exclude using gist(id_spieler with =, von_bis with &&));
CREATE TABLE
Time: 6,265 ms
test=*# create table spiele (id serial primary key, datum date, heim int references verein, gast int references verein);
CREATE TABLE
Time: 13,197 ms
test=*# create table tore (id serial primary key, id_spieler int references spieler, id_spiel int references spiele, ts timestamp);
CREATE TABLE
Time: 39,200 ms

Damit kannst dann auch abbilden, wieviele Tore Spieler X für Mannschaft Y gemacht hat und andere Dinge. Und es beachtet auch Transfers von Spielern zwischen den Vereinen. Aber auch das ist noch zu simpel, vermutlich.
 
Dies ist die richtige Lösung :)

SELECT s.Spieler_Name AS Spieler, v.Name AS Verein, s.Land, s.Tore
FROM Spieler AS s, Verein AS v
WHERE v.V_ID=s.Vereins_ID
AND s.Tore>13
ORDER BY s.Tore DESC
Unbenannt.PNG
 
Zuletzt bearbeitet:
Und dies ist die letzte Aufgabe-die ist wohl bisschen tricky und da braucht man auch die Verbindungstabelle:
"Erstellen Sie eine Abfrage für die Bundesliga Datenbank. Die Ergebnisrelation soll wieder eine Hitliste der 10 besten Spieler ausgeben, diesesmal soll jedoch der Durchschnittswert der geschossenen Tore pro Spiel errechntet werden."
Unbenannt2.PNG

Für Ideen wäre ich dankbar :)
 
Bin nicht ganz sicher was du meinst aber bzgl nächste Aufg: kann ich die Summer der Tore durch die Summe der Spiele teilen um so auf den Durchschnitt zu kommen?
 
Bin nicht ganz sicher was du meinst

Du hast ein Select, was den Veren, den Spieler und die Anzahl der Tore liefert. Nun hat aber der Spieler letztes Jahr für Verein X und dieses für VereinY gespielt. Er halt letztes Jahr 5 und dieses Jahr 7 Tore gemacht. Dein Select zeigt nun 2 Zeilen für ihn an und dabei für beide Vereine nun 12 Tore. Das ist vermutlich nicht das, was Du willst.
 
Werbung:
Die Relation Spieler zu Verein ist schonmal eine elementare Frage. Willst du nur einen Ist-Zustand abbilden kann das eine 1:n Relation sein, die Spielertabelle hat dann einen Fremdschlüssel der auf den Primärschlüssel der Vereinstabelle zeigt.

Vereine
ID, Name
1, Pommes-Rot-Weiss

Spieler
ID, ID_Verein, Name
100, 1, Klaus

Wenn du jetzt aber Spielerwechsel ermöglichen musst und weitergehende Informationen wie Vereinszugehörigkeit dazu anfallen brauchst du eine n:m Beziehung und eine Zwischentabelle.

Vereine
ID, Name
1, Pommes-Rot-Weiss

Spieler
ID, Name
100, Klaus

Verein_hat_Spieler
ID, Verein_ID, Spieler_ID, Eintrittsdatum, Austrittsdatum
9, 1, 100, 2015-01-01, 2015-12-31
 
Zurück
Oben