使用CONCAT和SELECT更新mysql字段

 阿爷取的名字-Xx 发布于 2023-01-18 12:35

编辑

在删除了我的愚蠢错误INTO(我正在使用INSERTS并继续前进)后,显示以下错误.还是行不通:

受影响的行:0

[错误] 1093 - 您无法在FROM子句中为更新指定目标表'tbl'


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

仅使用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;

错误

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


它可能与... CONCAT一起SELECT.但我没有找到解决方案......

1 个回答
  • 你需要子查询吗?

    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.

    2023-01-18 12:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有