使用CONCAT和SELECT更新mysql字段

时间:2014-03-13 12:10:12

标签: mysql sql concat

修改

删除INTO的愚蠢错误(我正在使用INSERTS并继续前进)后,显示以下错误。仍然没有工作:

  

受影响的行:0

     

[错] 1093 - 您无法指定目标表' tbl'   用于FROM子句中的更新


我正在尝试创建一个更新,我在其中选择列中的所有先前数据,添加一个互补字符串并将其另存为新数据。代码如下(带错误)

仅使用select,结果:

set @id = 3;

SELECT tbl_alias.string_id 
FROM tbl as tbl_alias
WHERE id = @id

-- the output `3,10,8,9,4,1,7,11,5,2,6,12`

我也试过这个查询(输出是我想要的)

SELECT CONCAT((
    SELECT tbl_alias.string_id 
    FROM tbl as tbl_alias
    WHERE id = @id
),',13,14,15,16') AS X

-- the output `3,10,8,9,4,1,7,11,5,2,6,12,13,14,15,16`

但是在更换下面的选择之后。它带来了同样的错误。

查询

set @id = 3;

UPDATE INTO tbl 
SET string_id = 
    CONCAT((
        SELECT tbl_alias.string_id 
        FROM tbl as tbl_alias
        WHERE id = @id
    ),',13,14,15,16') WHERE id = @id;

错误

  

[Err] 1064 - 您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   使用附近' INTO tbl SET string_id = CONCAT((SELECT   tbl_alias.string_id'在第1行


可能是CONCATSELECT。但我没有找到解决方案......

3 个答案:

答案 0 :(得分:20)

您需要子查询吗?

UPDATE tbl 
SET string_id = CONCAT(string_id, ',13,14,15,16')
WHERE id = @id;

请注意,在MySQL中,您无法使用UPDATE修改子查询中使用的表(尽管周围有小提琴): -

https://dev.mysql.com/doc/refman/5.5/en/subqueries.html

  

在MySQL中,您无法修改表并从子查询中的同一个表中进行选择。这适用于DELETE,INSERT等语句   REPLACE,UPDATE和(因为子查询可以在SET中使用   子句)LOAD DATA INFILE。

答案 1 :(得分:2)

尝试使用不UPDATE的{​​{1}}:

INTO

更新:

试试这个:

set @id = 3;

UPDATE tbl 
SET string_id = 
    CONCAT((
        SELECT tbl_alias.string_id 
        FROM tbl as tbl_alias
        WHERE id = @id
    ),',13,14,15,16') WHERE id = @id;

答案 2 :(得分:0)

此案例有时可帮助更新 TESTING 目的的所有列数据:

UPDATE customer_profile 
  SET businessId = CONCAT(businessId, ' new customer ', (id + 1))