【问题标题】:Copy values from one column to another in the same table在同一个表中将值从一列复制到另一列
【发布时间】:2012-02-18 14:11:37
【问题描述】:

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

我有:

Database name: list

-------------------
number | test
-------------------
123456 | somedata
123486 | somedata1
232344 | 34

我想拥有:

Database name: list

----------------
number | test
----------------
123456 | 123456
123486 | 123486
232344 | 232344

我应该有什么 MySQL 查询?

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    相关代码的简短答案是:

    UPDATE `table` SET test=number
    

    这里table 是表名,它被重音(又名反引号`)包围,因为这是escape keywords 的MySQL 约定(在这种情况下TABLE 是一个关键字)。


    当心!

    这是一个非常危险的查询,它将擦除表格每一行中test 列中的所有内容,将其替换为number(不管它的值如何)

    更常见的是使用WHERE 子句将您的查询限制在特定的行集:

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

    【讨论】:

    • 这是开发人员像外行一样思考的罕见情况之一。
    • 如果您不熟悉update command,请小心... 如果没有WHERE 子句,此命令将update ALL 记录在表。
    • 如此简单!谢谢!哇!
    • 正如@gmo 警告的那样,擦除大量数据的可能性很大。考虑先备份数据库,然后使用 WHERE 子句运行查询以将其限制为一行。如果您对结果满意,请删除 WHERE 子句。
    • 太棒了。没想到。谢谢。
    【解决方案2】:
    UPDATE `table_name` SET `test` = `number`
    

    您还可以在过程中进行任何数学更改或使用 MySQL 函数来修改值。

    【讨论】:

      【解决方案3】:

      试试这个:

      update `list`
      set `test` = `number`
      

      【讨论】:

      • 列表是
      【解决方案4】:

      注意:更新列的顺序很关键

      GOOD:我想要的是将现有的 Status 值保存到 PrevStatus

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

      BAD:Status 和 PrevStatus 最终都为 44

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

      【讨论】:

      • 你为什么要设置 Status=44?
      • @sceletia 只是一个任意值来演示问题
      【解决方案5】:

      尝试以下:

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

      它从“number”创建所有值的副本并将其粘贴到“test”

      【讨论】:

        【解决方案6】:

        以下对我有用..

        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 ;
          

          【讨论】:

            猜你喜欢
            • 2011-09-12
            • 1970-01-01
            • 1970-01-01
            • 2020-05-28
            • 1970-01-01
            • 1970-01-01
            • 2012-07-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多