将值从一列复制到同一表中的另一列


168

如何将值从一列复制到另一列?我有:

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

我希望有:

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

我应该有哪些mysql查询?

Answers:


362

有关代码的简短答案是:

UPDATE `table` SET test=number

table是表名,周围是重音符号(又称“-”),因为这是MySQL惯例,用于转义关键字TABLE在这种情况下为关键字)。

请注意,这是非常危险的查询,它将擦除test表每一行中列中的所有内容,并将其替换为number(无论其值如何)

使用WHERE子句将查询限制为仅特定的行集更为常见:

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

22
这是开发人员认为像外行的罕见情况之一。
Zaxter '16

9
如果您不熟悉update command...,请小心。如果没有WHERE子句,此命令将在表中记录update 所有记录。
gmo

很简单!谢谢!哇!
JimboSlice

1
@gmo警告说,清除大量数据的潜力很大。考虑先对数据库进行备份,然后使用WHERE子句运行查询以将其限制为一行。如果您对结果感到满意,请删除WHERE子句。
Blogo

太棒了 没想到。谢谢。
Onkar Musale

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;

为什么要设置Status = 44?
Sceletia

@sceletia只是一个任意值来说明问题
zzapper


3

以下对我有用。

  1. 确保您在查询编辑器应用程序中未使用安全模式。如果是,请禁用它!
  2. 然后运行以下sql命令

对于表说“ test_update_cmd”,源值列col2,目标值列col1和条件列col3:-

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

祝好运!


-7

您也可以使用Procedure做它,所以我有一个针对此的过程

 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 ;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.