Wie löse ich folgendes sql-Problem? (betrifft SELECT)
Peter
- datenbank
Hallo... ich versuche mich gerade an einer Bundesliga-Datenbank und habe bei der Spieltagsausgbe ein Problem. Wär schön, wenn jemand weiterhelfen könnte. Hier die Rahmenvoraussetzungen:
1,Arminia Bielefeld
2,Werder Bremen
.
.
.
2002,1,1,1
(Bedeutet: Saison 2002, Spieltag 1, Spielnummer 1, Heimrecht für Teamnummer 1 (Arminia Bielefeld)
2002,1,1,2
(Bedeutet: Saison 2002, Spieltag 1, Spielnummer 1, Gastrecht für Teamnummer 2 (Werder Bremen)
Das Problem: Ich suche nach einer Abfrage, die mir als Ergebnis lediglich den Namen des Heimteams und den Namen des Gastteams in einer Zeile wiedergibt, also
Arminia Bielefeld Werder Bremen
Irgendwie ist das (jedenfalls für mich ;o) nicht so einfach, da sowohl die Heimteamnummer als auch die Gastteamnummer innerhalb EINER Abfrage mit der Tabelle "teamnr" verknüpft werden muß. Ich hab da keine Ahnung, wie das funktioniert.
Mit...
SELECT s1.heimteamnr, t1.name, s2.gastteamnr FROM teamnr t1, saisonspieltagspielnr1 s1, saisonspieltagspielnr2 s2 WHERE s1.saison = 2002 AND s1.spieltag = 1 AND t1.teamnr = s1.heimteamnr AND s1.saison = s2.saison AND s1.spieltag = s2.spieltag AND s1.spielnr = s2.spielnr
schaff isch es gerade mal, die Heimteamnummer mit dem korrekten Teamnamen zu verknüpfen und dazu die entsprechende Gastteamnummer anzuzeigen. Allerdings hab ich es noch nicht geschafft, diese Gastteamnummer innerhalb der gleichen Abfrage ebenfalls mit dem passenden Teamnamen zu Verknüpfen. Jemand 'ne Ahnung?
Dankeschön.
Hi,
- in der Tabelle "saisonspieltagspielnr1" besteht der
Primärschlüssel aus "saison", "spieltag" und "spielnr".
Diesem Schlüssel wird jeweils eine Teamnummer eines Teams mit
Heimrecht zugeordnet, wobei die Teamnummer der Nummer in Tabelle
"teamnr" (s.o.) entspricht. Z.B.
- Analog dazu existiert sdie Tabelle "saisonspieltagspielnr2"
warum verwendest Du zwei Tabellen und nicht nur eine?
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael
Hallo,
- in der Tabelle "saisonspieltagspielnr1" besteht der Primärschlüssel aus "saison", "spieltag" und "spielnr". Diesem Schlüssel wird jeweils eine Teamnummer eines Teams mit Heimrecht zugeordnet, wobei die Teamnummer der Nummer in Tabelle "teamnr" (s.o.) entspricht. Z.B.
- Analog dazu existiert sdie Tabelle "saisonspieltagspielnr2" mit gleichem Primärschlüssel, nur das hier halt das Gastteam angegeben wird:
Warum machst Du aus diesen beiden Tabellen nicht eine, in der die Saison, der Spieltag, die Spielnummer und die beiden 'Kontrahenten' angegeben sind. Meiner Meinung nahc ist eine Aufteilung hier nicht notwendig, ja sogar schlechtes Design.
Das Problem: Ich suche nach einer Abfrage, die mir als Ergebnis lediglich den Namen des Heimteams und den Namen des Gastteams in einer Zeile wiedergibt, also ...
Du mußt die Tabelle, in der die Teams abgespeichert ist ( den Namen 'teamnr' finde ich dafür auch nicht gerade ideal), zweimal einbinden:
SELECT spiele.saison, spiele.datum, heimteam.name AS Heimmannschaft, gastteam.name AS Gastmannschaft
FROM spiele
JOIN teams AS heimteam ON heimteam.teamnr = spiele.heimteamnr
JOIN teams AS gastteam ON gastteam.teamnr = spiele.gastteamnr
(Ungetestet, in Ermangelung einer installierten mySQL-Version)
Grüße
Klaus
Danke Klaus, werde das gleich morgen früh umsetzen :o)
Warum machst Du aus diesen beiden Tabellen nicht eine, in der die Saison, der Spieltag, die Spielnummer und die beiden 'Kontrahenten' angegeben sind. Meiner Meinung nahc ist eine Aufteilung hier nicht notwendig, ja sogar schlechtes Design.
( den Namen 'teamnr' finde ich dafür auch nicht gerade ideal)
So seh ich das auch. Ich hatte die beiden Tabellen schon in einer, habe sie aber im Rahmen meiner verzweifelten Versuche mal auseinander gerissen und dann angesichts der vorgerückten Stunde keine Lust mehr gehabt, alles nochmal umzustrukturieren ;o). Werd' ich aber auf jeden Fall noch ändern. Auch die abenteuerlichen Tabellennamen sind provisorisch... es geht mir momentan nur um das Erlernen des Prinzips.
Mmmh.. funktioniert nicht, obwohl der Code, den Klaus angegeben hat, anscheinend richtig ist. Also ich habe das jetzt folgendermaßen versucht:
Tabelle "spiele"
1.Spalte: "saison"
2.Spalte: "spieltag"
3.Spalte: "spielnr"
4.Spalte: "heimnr"
5.Spalte: "gastnr"
(es folgen weitere in diesem Zusammenhang unwichtige Spalten. Die ersten drei Spalten bilden den Primärschlüssel. Übrigens: Wär es evt. besser, "spielnr" im Primärschlüssel durch "heimnr" und "gastnr" zu ersetzen?)
Beispielzeile:
2002,1,1,1,2
Tablle "teams"
1.Spalte: "teamnr"
2.Spalte: "name"
("teamnr" ist der Primärschlüssel)
Beispielzeilen:
1, Arminia Bielefeld
2, Werder Bremen
Wie gesagt soll durch eine Abfrage der Name des Heimteams und der Name des Gastteams in einer Zeile, also
Arminia Bielefeld Werder Bremen
ausgegeben werden. Analog zum Code aus Klaus' obigen Beitrag habe ich folgende "SELECT"-Anweisung getestet (es geht nur ums Prinzip, daher "ungefilterte" Daten):
"SELECT heimteam.name AS Heimmannschaft, gastteam.name AS Gastmannschaft
FROM spiele
JOIN teams AS heimteam ON heimteam.teamnr = spiele.heimnr
JOIN teams AS gastteam ON gastteam.teamnr = spiele.gastnr;"
Daraufhin erscheint beim mysqladmin folgende Fehlermeldung:
"You have an error in your SQL syntax near 'ON heimteam.teamnr = spiele.heimnr
JOIN teams AS gastteam ON gastteam.teamnr =' at line 3"
Was ist da los? Hat das irgendwas mit den Primärschlüsseln zu tun?
Hab den Fehler gefunden: Statt "JOIN" mußte ich einfach "INNER JOIN" einsetzen :o)
Mmmh.. funktioniert nicht, obwohl der Code, den Klaus angegeben hat, anscheinend richtig ist. Also ich habe das jetzt folgendermaßen versucht:
Tabelle "spiele"
1.Spalte: "saison"
2.Spalte: "spieltag"
3.Spalte: "spielnr"
4.Spalte: "heimnr"
5.Spalte: "gastnr"
(es folgen weitere in diesem Zusammenhang unwichtige Spalten. Die ersten drei Spalten bilden den Primärschlüssel. Übrigens: Wär es evt. besser, "spielnr" im Primärschlüssel durch "heimnr" und "gastnr" zu ersetzen?)
Beispielzeile:
2002,1,1,1,2
Tablle "teams"
1.Spalte: "teamnr"
2.Spalte: "name"
("teamnr" ist der Primärschlüssel)
Beispielzeilen:
1, Arminia Bielefeld
2, Werder Bremen
Wie gesagt soll durch eine Abfrage der Name des Heimteams und der Name des Gastteams in einer Zeile, also
Arminia Bielefeld Werder Bremen
ausgegeben werden. Analog zum Code aus Klaus' obigen Beitrag habe ich folgende "SELECT"-Anweisung getestet (es geht nur ums Prinzip, daher "ungefilterte" Daten):
"SELECT heimteam.name AS Heimmannschaft, gastteam.name AS Gastmannschaft
FROM spiele
JOIN teams AS heimteam ON heimteam.teamnr = spiele.heimnr
JOIN teams AS gastteam ON gastteam.teamnr = spiele.gastnr;"
Daraufhin erscheint beim mysqladmin folgende Fehlermeldung:
"You have an error in your SQL syntax near 'ON heimteam.teamnr = spiele.heimnr
JOIN teams AS gastteam ON gastteam.teamnr =' at line 3"
Was ist da los? Hat das irgendwas mit den Primärschlüsseln zu tun?