Copier les valeurs d'une colonne à une autre dans le même tableau

168

Comment puis-je copier des valeurs d'une colonne à une autre? J'ai:

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

Je veux avoir:

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

Quelle requête mysql dois-je avoir?

Lucas
la source

Réponses:

362

La réponse courte pour le code en question est:

UPDATE `table` SET test=number

Voici tablele nom de la table et il est entouré d'un accent grave (aka back-ticks `) car c'est la convention MySQL pour échapper les mots-clés (et TABLEc'est un mot-clé dans ce cas).

ATTENTION, c'est une requête assez dangereuse qui effacera tout dans la colonne testde chaque ligne de votre table en la remplaçant par le number(quelle que soit sa valeur)

Il est plus courant d'utiliser une WHEREclause pour limiter votre requête à un ensemble spécifique de lignes:

UPDATE `products` SET `in_stock` = true WHERE `supplier_id` = 10
Juicy Scripter
la source
22
C'est l'une de ces rares occasions où les développeurs ont pensé comme des profanes.
Zaxter
9
Attention si vous n'êtes pas familier avec le update command... Sans une clause WHERE , cette commande enregistrera update TOUS les enregistrements de la table.
gmo
Si simple! Je vous remercie! Hou la la!
JimboSlice
1
Potentiel important d'effacer beaucoup de données, comme l'a averti @gmo. Pensez à effectuer d'abord une sauvegarde de la base de données, puis exécutez la requête avec une clause WHERE pour la limiter à une ligne. Si vous êtes satisfait du résultat, supprimez la clause WHERE.
blogo
Impressionnant. n'a pas pensé à ça. Merci.
Onkar Musale
28
UPDATE `table_name` SET `test` = `number`

Vous pouvez également apporter des modifications mathématiques au processus ou utiliser les fonctions MySQL pour modifier les valeurs.

Czechnologie
la source
9

essaye ça:

update `list`
set `test` = `number`
juergen d
la source
n'est pas le listnom de la base de données?
Juicy Scripter
la liste est <nom de la table>
user2439124
8

ATTENTION : l'ordre des colonnes de mise à jour est critique

BON : Ce que je veux enregistre la valeur existante du statut dans PrevStatus

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

BAD : Status & PrevStatus finissent tous les deux par 44

UPDATE Collections SET  Status=44, PrevStatus=Status WHERE ID=1487496;
zzapper
la source
Mais pourquoi définissez-vous Status = 44?
Sceletia
@sceletia juste une valeur arbitraire pour démontrer le problème
zzapper
6

essayez de suivre:

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

il crée une copie de toutes les valeurs de "nombre" et la colle dans "test"

Jigneshsinh Rathod
la source
3

La suite a fonctionné pour moi.

  1. Assurez-vous que vous n'utilisez pas le mode sans échec dans votre application d'éditeur de requêtes. Si c'est le cas, désactivez-le!
  2. Puis exécutez la commande sql suivante

pour une table, disons 'test_update_cmd', colonne de valeur source col2, colonne de valeur cible col1 et colonne de condition col3: -

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

Bonne chance!

nitinr708
la source
-7

vous pouvez le faire avec la procédure aussi donc j'ai une procédure pour cela

 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 ;
Karan Kumar Mahto
la source