2013-03-01 9 views
7

Mi scuso in anticipo se SQL non funziona in questo modo, principalmente codice in C++/C# e non ho molta esperienza in SQL. Fondamentalmente voglio scorrere tutte le righe della tabella e modificare il valore di una colonna in base alle altre colonne. Una tabella di esempio potrebbe assomigliare a questo:Come aggiornare una colonna in tutte le righe di una tabella in base ai valori in altre colonne (per la stessa riga)?

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

Ora, in pseudo-codice, sto cercando di ottenere l'equivalente di:

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

Quale potrebbe essere un modo per ottenere un equivalente SQL di questo, o non può essere fatto in questo modo?

risposta

16

Questo potrebbe essere semplice come questo,

UPDATE tableName 
SET thirdCol = firstCol + secondCol 
5

Come è già stato risposto un semplice aggiornamento può essere fatto utilizzando:

UPDATE MyTable 
SET  Column3 = Column1 + Column2; 

valori Tuttavia memorizzare caclulated, specialmente per calcoli semplici non è buono pratica (ci sono sempre delle eccezioni e questa è una linea guida non una regola), se column3 dovrebbe sempre essere la somma di Column1 e column2, se il DBMS lo consente puoi creare una colonna calcolata.

ad es. In SQL-Server:

ALTER TABLE MyTable ADD Column4 AS Column1 + Column2; 

Se il DBMS non consente colonne calcolate allora si potrebbe creare una vista, quindi si memorizzano solo i dati di base e non il calcolo (di nuovo sintassi può variare a seconda del DBMS):

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

Uno di questi metodi garantirà il vostro valore column3 resta sempre aggiornato, anche se column1 o column2 vengono aggiornati

+0

Grazie per le informazioni aggiunta! Per fortuna non ho bisogno di implementare qualcosa di simile ma è utile sapere per le applicazioni future. – proseidon

+0

Grazie, ma la colonna originale verrà eliminata in seguito nel nostro caso, ma è utile sapere per le applicazioni future. – Roel

Problemi correlati