Copie valores de una columna a otra en la misma tabla


168

¿Cómo puedo hacer una copia de valores de una columna a otra? Yo tengo:

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

Quiero tener:

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

¿Qué consulta mysql debo tener?

Respuestas:


362

La respuesta corta para el código en cuestión es:

UPDATE `table` SET test=number

Aquí tableestá el nombre de la tabla y está rodeado por un acento grave (también conocido como back-ticks `) ya que esta es la convención de MySQL para escapar de las palabras clave (y TABLEes una palabra clave en ese caso).

CUIDADO, esta es una consulta bastante peligrosa que borrará todo en la columna testen cada fila de su tabla reemplazándola por number(independientemente de su valor)

Es más común usar una WHEREcláusula para limitar su consulta solo a un conjunto específico de filas:

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

22
Es una de esas raras ocasiones en que los desarrolladores han pensado como laicos.
Zaxter

9
Tenga cuidado si no está familiarizado con update command... Sin una cláusula WHERE , este comando update TODOS los registros de la tabla.
OMG

¡Tan sencillo! ¡Gracias! ¡Guauu!
JimboSlice

1
Serio potencial para borrar una gran cantidad de datos, como advirtió @gmo. Considere hacer una copia de seguridad de la base de datos primero, luego ejecute la consulta con una cláusula WHERE para limitarla a una línea. Si está satisfecho con el resultado, elimine la cláusula WHERE.
blogo

Increíble. No pensé en eso. Gracias.
Onkar Musale

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

También puede hacer cambios matemáticos en el proceso o usar las funciones de MySQL para modificar los valores.



8

CUIDADO : el orden de las columnas de actualización es crítico

BIEN : lo que quiero guarda el valor de estado existente en PrevStatus

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

MALO : El estado y PrevStatus terminan en 44

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

Sin embargo, ¿por qué está configurando Status = 44?
Sceletia

@sceletia es solo un valor arbitrario para demostrar el problema
zzapper

6

intente lo siguiente:

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

crea una copia de todos los valores de "número" y lo pega en "prueba"


3

Lo siguiente funcionó para mí ...

  1. Asegúrese de no estar usando el modo seguro en su aplicación de editor de consultas. Si es así, ¡deshabilítelo!
  2. Luego ejecute el siguiente comando sql

para una tabla, por ejemplo, 'test_update_cmd', columna de valor de origen col2, columna de valor de destino col1 y columna de condición col3: -

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

¡Buena suerte!


-7

puedes hacerlo con procedimiento también, así que tengo un procedimiento para esto

 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 ;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.