2011-12-01 43 views
1

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

我想:

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

“你无法指定目标表”的常用解决方法是将其包装在另一层子查询中,这将导致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

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

+0

CHAR()做到了。 thx – Stoob

+0

@Stoob:不客气! – ruakh

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

+0

不知道,但谢谢。 CHAR()似乎工作 – Stoob

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答案。

相关问题