Скопіюйте значення з одного стовпця в інший в ту саму таблицю


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назва таблиці, і вона оточена серйозним акцентом (він же back-ticks `), оскільки це умова MySQL для втечі ключових слівTABLEв цьому випадку це ключове слово).

ВВАЖАЙТЕ, що це досить небезпечний запит, який видалить усе в стовпці testв кожному рядку таблиці, замінивши його на number(незалежно від його значення)

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

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

22
Це один з тих рідкісних випадків, коли розробники думали, як миряни.
Закстер

9
Обережно, якщо ви не знайомі з update command... Без пункту WHERE , ця команда update ВСЕ записує в таблицю.
gmo

Так просто! Дякую! Оце Так!
JimboSlice

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

Дивовижно. не думав про це. Дякую.
Онкар Мусале

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

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



8

ПОПЕРЕДЖЕННЯ : Порядок оновлення стовпців є критичним

ДОБРО : Що я хочу, зберігає PrevStatus існуюче значення статусу

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

BAD : і статус, і PrevStatus закінчуються як 44

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

Чому ви встановлюєте статус = 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.