更新查询中引号引发问题,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
相关产品推荐
相关产品推荐

