含CTE与UPDATE子句的SQLite语句预编译报错但SQLite浏览器可执行
问题原因分析
你遇到的报错核心原因是SQLite版本兼容性问题:
- SQLite的
UPDATE ... FROM多表更新语法,是在3.33.0版本(2020年8月14日发布)才正式引入支持的。 - 你本地SQLite浏览器内置的SQLite内核版本≥3.33.0,所以能正常执行这条语句;但你的程序中调用的sqlite3库版本低于3.33.0,不支持该语法,因此调用
sqlite3_prepare_v2预编译时会触发"near 'FROM': syntax error"的语法错误。
如果需要兼容低版本SQLite,可以将语句改写为子查询形式,例如:
UPDATE itemfield SET updated_at = (SELECT field_updated_at FROM item WHERE uuid = itemfield.item_uuid), value_updated_at = (SELECT field_updated_at FROM item WHERE uuid = itemfield.item_uuid) WHERE item_uuid IN ( SELECT DISTINCT item_uuid FROM itemfield WHERE updated_at <= 0 OR value_updated_at <= 0 );
内容的提问来源于stack exchange,提问作者Supriya Yadav
相关产品推荐
相关产品推荐

