Copia i valori da una colonna all'altra nella stessa tabella


168

Come posso fare una copia dei valori da una colonna all'altra? Io ho:

Database name: list
number | test
123456 | somedata
123486 | somedata1
232344 | 34

Voglio avere:

Database name: list
number | test
123456 | 123456
123486 | 123486
232344 | 232344

Quale query mysql dovrei avere?

Risposte:


362

La risposta breve per il codice in questione è:

UPDATE `table` SET test=number

Ecco tableil nome della tabella ed è circondato da un accento grave (noto anche come back-ticks) in quanto questa è la convenzione MySQL per sfuggire alle parole chiave (ed TABLEè una parola chiave in quel caso).

ATTENZIONE, questa è una query piuttosto pericolosa che cancellerà tutto nella colonna testin ogni riga della tabella sostituendola con number(indipendentemente dal suo valore)

È più comune utilizzare la WHEREclausola per limitare la query solo a un set specifico di righe:

UPDATE `products` SET `in_stock` = true WHERE `supplier_id` = 10

22
È una di quelle rare occasioni in cui gli sviluppatori hanno pensato come laici.
Zaxter,

9
Attento se non si ha familiarità con update command... Senza una clausola WHERE , questo comando update TUTTI i record nella tabella.
OG

Così semplice! Grazie! Wow!
JimboSlice

1
Grave potenziale per cancellare molti dati, come avvertito @gmo. Considerare innanzitutto di effettuare un backup del database, quindi eseguire la query con una clausola WHERE per limitarlo a una riga. Se sei soddisfatto del risultato, rimuovi la clausola WHERE.
Blogo,

Eccezionale. non ci ho pensato. Grazie.
Onkar Musale,

28
UPDATE `table_name` SET `test` = `number`

Puoi anche apportare modifiche matematiche al processo o utilizzare le funzioni MySQL per modificare i valori.



8

ATTENZIONE : l'ordine delle colonne di aggiornamento è fondamentale

BUONO : Quello che voglio salva il valore di stato esistente in PrevStatus

UPDATE Collections SET  PrevStatus=Status, Status=44 WHERE ID=1487496;

BAD : Status e PrevStatus finiscono entrambi come 44

UPDATE Collections SET  Status=44, PrevStatus=Status WHERE ID=1487496;

Perché stai impostando Status = 44, però?
Sceletia,

@sceletia solo un valore arbitrario per dimostrare il problema
zzapper

6

prova a seguire:

UPDATE `list` SET `test` = `number` 

crea una copia di tutti i valori da "numero" e incollalo in "test"


3

Seguito ha funzionato per me ..

  1. Assicurarsi di non utilizzare la modalità provvisoria nell'applicazione dell'editor di query. Se lo sei, disabilitalo!
  2. Quindi eseguire il comando sql seguente

per una tabella dire 'test_update_cmd', colonna valore sorgente col2, colonna valore target col1 e colonna condizione col3: -

UPDATE  test_update_cmd SET col1=col2 WHERE col3='value';

In bocca al lupo!


-7

puoi farlo anche con Procedura, quindi ho una procedura per questo

 DELIMITER $$
 CREATE PROCEDURE copyTo()
       BEGIN
               DECLARE x  INT;
            DECLARE str varchar(45);
              SET x = 1;
            set str = '';
              WHILE x < 5 DO
                set  str = (select source_col from emp where id=x);
            update emp set target_col =str where id=x;      
            SET  x = x + 1;
                END WHILE;

       END$$
   DELIMITER ;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.