Seite 1 von 1

SQL-Referenzieren und ersetzen

Verfasst: Montag 14. August 2017, 21:16
von dnns92
Hey liebes Forum,
erstmal ein herzliches Hallo! Da mir Programmieren an sich Spaß macht, möchte ich mich in Python einlernen und habe dafür einige Datensets heruntergeladen und analysiere diese.

Aber nun zur Frage:
Aber ich habe jetzt einige Stunden herumprobiert und gesucht und keine Antwort zu meinem Problem gefunden.

Das Problem gestaltet sich wie folgt:
Ich habe ein SQL-Datenset mit Fußball-Matchdaten und mehreren Tabellen, u.A. "Matches" und "Player_Attributes".

Dabei entspricht die Tabelle "Matches" den eigentlichen Fußball-Spielen und enthält u.A. Referenznummern der Spieler, die sich in der Startaufstellung befanden. Diese Referenznummern entsprechen einer Spalte in der Tabelle "Player_Attributes". Dort sind auch die Eigenschaften der FIFA_17 Spieler aufgeführt.

Kleines Beispiel: ein Spiel zw. Bayern München und Juventus Turin:
Tabelle "Match":

home away home_player_0 home_player_1 home_player_2 home_player_3 home_player_4 home_player_5
MUN JUV 12314 28347 23472 123740 123643 98485
...

Tabelle "Player_Attributes":

index api_index overall_strength offensive defensive
1 12314 90 93 87
2 12740 81 85 76
3 89064 75 75 75

Die Einträge in den home_playern spalten entsprechen dem API-Index in der Tabelle "Player_Attributes". So hat home_player_1 die API-Nummer "12314" und ist ein Spieler mit der "overall_strength" 90 (siehe Tabelle "Player_attributes, Zeile 1).
Ich möchte nun alle Einträge in den Spalten "home_player_X" durch die zugehörigen "overall_strength" - Werte ersetzen.
die Spalte home_player_0 hätte jetzt also den Wert "90" anstatt "12314".

Gibt es dafür eine SQL-Funktion ? (Ich meine so eine Operation sollte Standard sein, oder?)
Entschuldigt, falls die Antwort super-offensichtlich ist,
Liebe Grüßlis,

Dennis

Re: SQL-Referenzieren und ersetzen

Verfasst: Montag 14. August 2017, 21:47
von __deets__
Was heisst "ersetzen"? In der Datenbank? Das solltest du tunlichst bleiben lassen, denn damit geht dir die Information verloren, wer an einem Spiel teilgenommen hat.

In einer *Abfrage* kannst du natuerlich die Daten schon gleich zusammenfuehren, das Thema heisst joins. Leider ist dein Tabellendesign etwas ungluecklich, weshalb man mehrere Joins mit alias-Namen anlegen muesste. Das ist schon recht kompliziert.

Wieviele Daten sind das denn? Wenn nicht so viele, dann lad' sie einfach in den Speicher, und arbeite darauf rum.

Re: SQL-Referenzieren und ersetzen

Verfasst: Dienstag 15. August 2017, 07:16
von Sirius3
@dnns92: dafür gibt es keinen direkten SQL-Ausdruck. Daran sieht man sehr schön, warum das Tabellendesign sehr schlecht ist. Man nummeriert auch bei Tabellen keine Spaltennamen durch, das macht Abfragen nur unnötig kompliziert. Zudem sind Zusatzinformationen so gar nicht speicherbar. Wie geht man damit um, wenn Spieler ausgewechselt werden? Wo werden rote und gelbe Karten gespeichert?

Der erste Schritt wäre es also, die Tabellen in eine sinnvollere Form zu überführen.
[codebox=text file=Unbenannt.txt]
Tabelle Match:
id | team_home_id | team_away_id

Tabelle Match_Player
id | match_id | team_id | player_id | ...

Tabelle Player:
id | overall_strength | offensive | defensive | ...
[/code]

Dann kann man mit einem einfachen join Spielerdaten und Spieler im Spiel zusammenfügen und für ein bestimmtes Spiel abfragen.