SQL Werte einer Spalte in eine andere Spalte übernehmen

QuantenWalli

Lt. Junior Grade
Registriert
Aug. 2007
Beiträge
413
Hallo Leute,

ich steh grad auf dem Schlauch.
Wie bekomme ich es denn per SQL am sinnvollsten hin, die Werte einer Spalte in eine andere Spalte zu übernehmen?

Es dreht sich um eine einzige Tabelle, z.B. mit dem Namen BUCHUNGEN.
Der Primärschlüssel setzt sich aus 10 Attributen zusammen, z.B. PRIMARY KEY (BUCHUNGEN.AT1, ..., BUCHUNGEN.AT10).

Werte der Spalte BUCHUNGEN.S1 sollen unter folgenden Bedingungen in die Spalte BUCHUNGEN.S2 übertragen werden:
  • der jeweilige Datensatz mit dem S1-Wert hat in einer weiteren Spalte den Wert W=1 (und nicht W=2)
  • die empfangende S2-Zeile hat W=2 (und nicht W=1)
  • je zwei Datensätze mit W=1 und W=2 sind in den Spalten BUCHUNGEN.AT1 bis BUCHUNGEN.AT3 identisch, wodurch sich die Zugehörigkeit ergibt.

=> Der S1-Wert eines Datensatzes mit W=1 soll also den S2-Wert eines Datensatzes mit W=2 ersetzen, wenn AT1 bis AT3 der beiden Datensätze identisch sind.

Sorry, falls ich mich umständlich ausgedrückt habe. Das liegt am momentanen Knoten im Kopf :freak:
 
Hancock schrieb:
Aber ich glaub, deine Datenbankstruktur ist suboptimal.
Danke, werd ich gleich probieren. Hab schon alles mögliche durch, auch mit Joins, funktioniert hats aber nicht.
Ich weiß, "suboptimal" ist eine Untertreibung. Ist bestimmt alles über 30 Jahre alt. :freaky:

Update: funktioniert nicht. Die SQL-Implementierung der DB2 for i 7.3 mag wohl kein UPDATE ... JOIN :rolleyes:
 
Zuletzt bearbeitet:
Falls ich mich nicht irre, mag auch (zumindest) MySQL keine Updates mit Joins, wo sich Tables selbst referenzieren.

Umgehen könnte man das mit temporären Tables, die den selben Inhalt haben.
 
Danke, auch eine Idee. Ich wollts aber erstmal direkt ohne Umwege versuchen, aber "ich bin zu alt für den Scheiß" :D
Bei der DB2 for i soll man wohl MERGE statt UPDATE nutzen. Erstmal die SQL-Referenz durchlesen und die Syntax kapieren...
 
Man sollte das auch umgehen können, indem man an Stelle des Joins Subselects verwendet.
 
Zurück
Oben