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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:52:43