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

SQLite递归查询报错sqlite3.OperationalError near SELECT语法错误求助

SQLite递归查询语法错误修复方案

核心错误原因

  • 错误1:compute函数的两个入参都是标量子查询,SQLite要求作为函数参数的子查询必须用圆括号单独包裹,你当前直接将SELECT语句写在函数参数列表中,没有外层括号,是触发near "SELECT": syntax error的直接原因。
  • 错误2:递归CTE length的定义结束后多了一个多余的逗号,WITH子句中仅多个CTE并列时才用逗号分隔,最后一个CTE定义后不允许加逗号。

修复后的完整代码

WITH RECURSIVE length(len, id, ord) AS (
    SELECT 0, t.id, 1
    FROM temp t
    UNION
    SELECT len + compute(
        -- 子查询作为函数参数添加外层括号
        (SELECT w2.nodeid
         FROM waypoint w2
         WHERE w2.ordinal = ord AND w2.wayid = t.id),
        (SELECT w2.nodeid
         FROM waypoint w2
         WHERE w2.ordinal = ord + 1 AND w2.wayid = t.id)
    ), t.id, w1.ordinal
    FROM waypoint w1, length, temp t
    WHERE w1.wayid = t.id AND w1.ordinal = ord + 1
)
-- 移除了CTE末尾的多余逗号
SELECT *
FROM length

额外优化建议

如果不需要对递归返回的结果去重,可以将UNION替换为UNION ALL,能大幅提升递归查询的执行效率。另外建议将逗号分隔的隐式表连接写法替换为INNER JOIN显式连接,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:02