Копировать значения из одного столбца в другой в той же таблице


168

Как я могу сделать копии значений из одного столбца в другой? У меня есть:

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

Я хочу иметь:

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

Какой запрос MySQL я должен иметь?

Ответы:


362

Краткий ответ для рассматриваемого кода:

UPDATE `table` SET test=number

Вот tableимя таблицы, оно окружено серьезным акцентом (так называемые обратные тики), так как это соглашение MySQL по экранированию ключевых словTABLEв данном случае это ключевое слово).

ВНИМАНИЕ, что это довольно опасный запрос, который уничтожит все в столбце testв каждой строке таблицы, заменив его на number(независимо от его значения)

Чаще используется WHEREусловие, чтобы ограничить ваш запрос только определенным набором строк:

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

22
Это один из тех редких случаев, когда разработчики думали как миряне.
Zaxter

9
Будьте осторожны, если вы не знакомы с update command... Без предложения WHERE эта команда update ВСЕМ записи в таблице.
ГМО

Так просто! Спасибо! Вот Это Да!
JimboSlice

1
Серьезный потенциал для стирания большого количества данных, как предупредил @gmo. Попробуйте сначала создать резервную копию базы данных, а затем выполнить запрос с предложением WHERE, чтобы ограничить его одной строкой. Если вы довольны результатом, удалите предложение WHERE.
blogo

Потрясающие. не думал об этом. Спасибо.
Онкар Мусале

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

Вы также можете вносить любые математические изменения в процесс или использовать функции MySQL для изменения значений.



8

ВНИМАНИЕ : порядок обновления столбцов имеет решающее значение

ХОРОШО : То, что я хочу, сохраняет существующее значение статуса в PrevStatus

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

ПЛОХО : Статус и PrevStatus оба заканчивают как 44

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

Почему вы устанавливаете Status = 44?
Sceletia

@sceletia просто произвольное значение, чтобы продемонстрировать проблему
zzapper

6

попробуйте следующее:

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

он создает копию всех значений из «числа» и вставляет его в «тест»


3

Следующий работал на меня ..

  1. Убедитесь, что вы не используете безопасный режим в приложении-редакторе запросов. Если да, отключите его!
  2. Затем выполните следующую команду sql

для таблицы скажем 'test_update_cmd', столбец исходного значения col2, столбец целевого значения col1 и столбец условия col3: -

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

Удачи!


-7

Вы можете сделать это с помощью процедуры также, поэтому у меня есть процедура для этого

 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 ;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.