You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新查询中引号引发问题,SQL语句执行失败请求技术协助

解决UPDATE语句中的引号语法错误问题

你的问题出在字符串内的单引号未正确转义:整个子查询被单引号包裹作为foreign_table的赋值内容,但concat(persons.firstname,'-',roles.r_name)里的'-'用了单引号,导致SQL解析器误以为字符串在这里结束,后续语法直接混乱。另外原语句的子查询还少了一个闭合括号),这也是执行失败的原因之一。

下面是两种可行的修正方案:

方案1:转义内部单引号

在MySQL中,要在单引号包裹的字符串里使用单引号,最通用的方式是用两个连续单引号''表示一个实际的单引号。修正后的语句如下:

UPDATE table_attributes 
SET foreign_table= '(select users_roles.*, concat(persons.firstname,''--'',roles.r_name) as name from users_roles users_roles left join users users on users_roles.user_id = users.user_id LEFT JOIN persons on persons.user_id=users.user_id left join roles roles on users_roles.role_id = roles.role_id) as users_roles ' 
WHERE att_id=24;

方案2:用双引号包裹外层字符串

如果你的数据库(比如MySQL)没有启用ANSI_QUOTES模式,可以直接用双引号包裹整个赋值字符串,内部保留原有的单引号即可:

UPDATE table_attributes 
SET foreign_table= "(select users_roles.*, concat(persons.firstname,'-',roles.r_name) as name from users_roles users_roles left join users users on users_roles.user_id = users.user_id LEFT JOIN persons on persons.user_id=users.user_id left join roles roles on users_roles.role_id = roles.role_id) as users_roles " 
WHERE att_id=24;

两种方案都能解决引号冲突问题,同时补上了子查询缺失的闭合括号,现在语句应该可以正常执行了。

内容的提问来源于stack exchange,提问作者Yogus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:47:38