SQLite3同表更新记录:将language字段替换为对应word的id值
解决SQLite3中UPDATE语句的别名问题,实现language字段替换需求
嘿,我来帮你搞定这个SQLite的更新问题!你说得没错,SQLite确实不支持在UPDATE语句开头直接给目标表加别名(比如UPDATE myTable as t1这种写法会报错),不过我们可以调整语句写法来实现你要的效果。
方案一:使用相关子查询(修正你的第一条语句)
把UPDATE后的别名去掉,直接在子查询里用原表名关联即可,这样SQLite能正确识别关联关系:
UPDATE myTable SET language = ( SELECT t2.id FROM myTable t2 WHERE substr(myTable.language, 2) = t2.word ) WHERE language like '#%';
这个语句会遍历所有language以#开头的记录,通过子查询找到对应word的id,然后替换掉原language字段。因为你提到word字段是唯一的,所以子查询只会返回单个结果,不会出现更新异常。
方案二:使用UPDATE ... FROM语法(修正你的第二条语句)
SQLite支持UPDATE ... FROM的写法,但别名的使用和你原来的写法不同,不需要给目标表加别名,直接在WHERE子句里关联FROM中的表:
UPDATE myTable SET language = t2.id FROM myTable t2 WHERE substr(myTable.language, 2) = t2.word AND myTable.language like '#%';
这种写法更直观,通过FROM子句把表自关联,匹配到对应的记录后直接更新language字段。
两种方案都能实现你要的效果:把id:5555的记录的language字段从#french替换成2,同时处理其他符合条件的记录。
内容的提问来源于stack exchange,提问作者Samuel Thorval
相关产品推荐
相关产品推荐

