2013-03-01 9 views
7

Ich entschuldige mich im Voraus, wenn SQL auf diese Weise nicht funktioniert, ich meist Code in C++/C# und ich habe nicht viel Erfahrung in SQL. Ich möchte im Grunde jede Zeile der Tabelle durchlaufen und einen Spaltenwert basierend auf den anderen Spalten ändern. Ein Beispiel Tabelle könnte wie folgt aussehen:Wie aktualisiere ich eine Spalte in allen Zeilen einer Tabelle basierend auf Werten in anderen Spalten (für dieselbe Zeile)?

__________________________ 
|first #|second #|third #| 
|_______|________|_______| 
|___1___|___1____|___0___| 
|___5___|___2____|___0___| 
|___3___|___6____|___0___| 
|___2___|___4____|___0___| 

nun in Pseudo-Code, ich versuche, das Äquivalent zu bekommen:

foreach row in mytable, column 3 = column 1 + column 2 

Was für ein Weg wäre, eine SQL-Äquivalent von diesem zu erhalten, oder kann es nicht auf diese Weise gemacht werden?

Antwort

16

Dies, da dies einfach sein könnte,

UPDATE tableName 
SET thirdCol = firstCol + secondCol 
5

Wie bereits ein einfaches Update beantwortet wurde verwendet, kann getan werden:

UPDATE MyTable 
SET  Column3 = Column1 + Column2; 

jedoch caclulated Werte speichern, insbesondere für einfache Berechnungen ist nicht gut Praxis (es gibt immer Ausnahmen und dies ist eine Richtlinie keine Regel), wenn Spalte3 immer die Summe von Spalte1 und Spalte2 sein sollte, dann, wenn Ihr DBMS es erlaubt, könnten Sie eine berechnete Spalte erstellen.

z.B. In SQL-Server:

ALTER TABLE MyTable ADD Column4 AS Column1 + Column2; 

Wenn Ihr DBMS nicht berechnete Spalten nicht zulässt, dann können Sie eine Ansicht erstellen, so dass Sie nur die Basisdaten zu speichern und nicht die Berechnung (wieder Syntax von DBMS können variieren):

CREATE VIEW myTableWithTotal 
AS 
    SELECT Column1, Column2, Column1 + Column2 AS Column2 
    FROM MyTable 

Jede dieser Methoden wird Ihr column3 Wert bleibt auf dem neuesten Stand, auch wenn column1 oder column2 aktualisiert werden

+0

Vielen Dank für die Zusatzinformationen gewährleisten! Ich brauche glücklicherweise nichts dergleichen zu implementieren, aber es ist nützlich für zukünftige Anwendungen. – proseidon

+0

Danke, aber die ursprüngliche Spalte wird später in unserem Fall gelöscht, aber es ist nützlich für zukünftige Anwendungen zu wissen. – Roel

Verwandte Themen