2011-12-01 128 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答案。

相關問題