MySQL将一列中字段的值复制到表的同一列中的另一个字段

MySQL将一列中字段的值复制到表的同一列中的另一个字段,mysql,Mysql,我希望将列中某个字段的值复制到同一列中的另一个字段。我的理由是字段是ctrl-a分隔的,我不知道如何使用insert手动输入 我试过: update table_foo set my_column = ( select my_column from table_foo where id=5 ) where id=1; 这给了我: ERROR 1093 (HY000): You can't specify target table 或者,如果您知道如何插入CTRL+分隔值,

我希望将列中某个字段的值复制到同一列中的另一个字段。我的理由是字段是ctrl-a分隔的,我不知道如何使用insert手动输入

我试过:

update table_foo
set my_column =
(
   select my_column
   from table_foo
   where id=5
)
where id=1;
这给了我:

ERROR 1093 (HY000): You can't specify target table 

或者,如果您知道如何插入CTRL+分隔值,也可以解决我的问题。谢谢

我不清楚在什么字符编码中使用了什么ctrl-a分隔值,但以下内容将满足您的需要,创建一个完整的表别名,您可以从中提取选择:


更新table\u foo set my\u column=从SELECT*FROM table\u foo中选择my\u column AS t WHERE t.id=5 WHERE id=1

我不清楚什么字符编码中有哪些ctrl-a分隔值,但以下操作将满足您的需要,创建一个完整的表别名,您可以从中提取您的选择:

更新表\u foo设置我的\u列=从表\u foo中选择我的\u列作为t,其中t.id=5,其中id=1查看:

错误1093 ER\U UPDATE\U TABLE\U USED SQLSTATE=HY000 Message=无法指定目标表“x” for update in FROM子句 在以下情况下会发生此错误,即试图修改表并从子查询中的同一表中进行选择:

可以在UPDATE语句中使用子查询进行赋值,因为子查询在UPDATE和DELETE语句以及SELECT语句中都是合法的。但是,在这种情况下,不能对子查询FROM子句和update目标使用同一个表,即表t1

有关解决方法,请阅读@spud和@ruakh answers。

查看:

错误1093 ER\U UPDATE\U TABLE\U USED SQLSTATE=HY000 Message=无法指定目标表“x” for update in FROM子句 在以下情况下会发生此错误,即试图修改表并从子查询中的同一表中进行选择:

可以在UPDATE语句中使用子查询进行赋值,因为子查询在UPDATE和DELETE语句以及SELECT语句中都是合法的。但是,在这种情况下,不能对子查询FROM子句和update目标使用同一个表,即表t1


对于解决方案,请阅读@spud和@ruakh answers。

对于您不能指定的目标表,通常的解决方案是将其包装在另一层子查询中,这将导致MySQL在运行更新之前创建一个临时表,而不是在更新表的同时尝试读取表:

UPDATE table_foo
   SET my_column =
        ( SELECT my_column
            FROM ( SELECT my_column
                     FROM table_foo
                    WHERE id = 5
                 ) t
        )
 WHERE id = 1
;
也就是说,你说你唯一的问题是你不知道如何输入Ctrl-A?这更容易解决。:-使用这:

将我的_列设置为^Atext^A


免责声明:这两个都未经测试。

无法指定目标表的常见解决方法是将其包装在另一层子查询中,这将导致MySQL在运行更新之前创建一个临时表,而不是在更新表的同时尝试读取表:

UPDATE table_foo
   SET my_column =
        ( SELECT my_column
            FROM ( SELECT my_column
                     FROM table_foo
                    WHERE id = 5
                 ) t
        )
 WHERE id = 1
;
也就是说,你说你唯一的问题是你不知道如何输入Ctrl-A?这更容易解决。:-使用这:

将我的_列设置为^Atext^A

免责声明:这些都未经测试

UPDATE table_foo
   SET my_column = CONCAT(CHAR(1), 'text', CHAR(1))
 WHERE id = 1
;