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

时间:2011-12-01 21:31:52

标签: mysql

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

我试过了:

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 + A分隔值以解决我的问题。谢谢!

3 个答案:

答案 0 :(得分:3)

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

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?这更容易解决。 :-)使用the built-in CHAR() function。这样:

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

会将my_column设置为^Atext^A

(免责声明:这些都是未经测试的。)

答案 1 :(得分:1)

我不清楚“ctrl-a”分隔值是什么(以什么字符编码?),但以下内容将执行您需要的操作,创建一个完整的表别名,您可以从中选择:

update table_foo set my_column = (SELECT my_column FROM (SELECT * FROM table_foo) AS t WHERE t.id = 5) where id=1

答案 2 :(得分:1)

看看mysql documentation

错误1093(ER_UPDATE_TABLE_USED) SQLSTATE = HY000 消息=“您无法指定目标表'x' 用于FROM子句中的更新“ 在以下情况下会出现此错误,该错误尝试修改表并从子查询中的同一个表中进行选择

UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);

您可以在UPDATE语句中使用子查询进行赋值,因为子查询在UPDATE和DELETE语句以及SELECT语句中都是合法的。但是,对于子查询FROM子句和更新目标,不能使用相同的表(在本例中为表t1)。

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