Copie valores de uma coluna para outra na mesma tabela


168

Como faço para copiar valores de uma coluna para outra? Eu tenho:

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

Eu quero ter:

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

Qual consulta mysql devo ter?

Respostas:


362

A resposta curta para o código em questão é:

UPDATE `table` SET test=number

Aqui tableestá o nome da tabela e está cercado por sotaque grave (também conhecido como back-ticks `), pois esta é a convenção do MySQL para escapar de palavras-chave (eTABLE é uma palavra-chave nesse caso).

CUIDADO, que esta é uma consulta bastante perigosa, que limpará tudo da coluna testem todas as linhas da sua tabela, substituindo-a pelonumber (independentemente do seu valor)

É mais comum usar a WHEREcláusula para limitar sua consulta apenas a um conjunto específico de linhas:

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

22
É uma daquelas raras ocasiões em que os desenvolvedores pensam como leigos.
Zaxter 06/03/19

9
Cuidado se você não estiver familiarizado com a update command... Sem uma cláusula WHERE , este comando update TODOS os registros na tabela.
gmo

Tão simples! Obrigado! Uau!
precisa saber é o seguinte

1
Potencial sério de limpeza de muitos dados, como advertiu a @gmo. Considere fazer um backup do banco de dados primeiro e, em seguida, execute a consulta com uma cláusula WHERE para limitá-lo a uma linha. Se você estiver satisfeito com o resultado, remova a cláusula WHERE.
Bloqueou

Impressionante. não pensei nisso. Obrigado.
Onkar Musale 16/03/19

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

Você também pode fazer alterações matemáticas no processo ou usar as funções do MySQL para modificar os valores.



8

CUIDADO : A ordem das colunas de atualização é crítica

BOM : O que eu quero salva o valor de status existente no PrevStatus

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

RUIM : Status e PrevStatus terminam em 44

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

Por que você está definindo Status = 44, no entanto?
Sceletia

@sceletia apenas um valor arbitrário para demonstrar o problema
ZZAPPER

6

tente o seguinte:

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

ele cria cópia de todos os valores de "number" e cola-o em "test"


3

A seguir funcionou para mim ..

  1. Verifique se você não está usando o modo de segurança no aplicativo editor de consultas. Se estiver, desative-o!
  2. Em seguida, execute o seguinte comando sql

para uma tabela, diga 'test_update_cmd', coluna de valor de origem col2, coluna de valor de destino col1 e coluna de condição col3: -

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

Boa sorte!


-7

você pode fazê-lo com o procedimento também, então eu tenho um procedimento para isso

 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 ;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.