SQL-Referenzieren und ersetzen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
dnns92
User
Beiträge: 1
Registriert: Montag 14. August 2017, 20:05

Montag 14. August 2017, 21:16

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
__deets__
User
Beiträge: 4040
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 14. August 2017, 21:47

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.
Sirius3
User
Beiträge: 8832
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 15. August 2017, 07:16

@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.
Antworten