修改
删除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行
可能是CONCAT
和SELECT
。但我没有找到解决方案......
答案 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))