DeepSeek总结的Turso的CTE支持情况

原文地址:https://github.com/tursodatabase/turso/issues/4637

一、总体情况

Turso 仅支持 基本 CTE(仅限于 SELECT 语句),且存在多项关键限制。相比 SQLite,其 CTE 支持尚不完整。


二、支持与不支持的功能对比

✅ 已支持的功能(基本 SELECT CTE):
  • 单个 CTE、多个 CTE、CTE 间相互引用
  • 包含 ORDER BY、LIMIT、GROUP BY、DISTINCT
  • 包含 CASE、COALESCE、EXISTS、IN、LEFT JOIN 等复杂表达式
  • 包含聚合函数、数学运算、字符串函数、VALUES 子句等
  • 可在子查询或嵌套查询中使用
❌ 不支持或存在问题的功能:
  1. CTE 无法被多次引用(关键缺陷)

    • 同一 CTE 不能在查询中引用超过一次(如自连接、多次出现在子查询中)。
  2. CTE 内不支持复合查询(BUG)

    • UNION、INTERSECT、EXCEPT、UNION ALL 在 CTE 内部会被错误拒绝。
  3. CTE 不能与 DML 语句结合使用

    • 不支持 WITH ... INSERT、WITH ... UPDATE、WITH ... DELETE。
  4. 不支持显式列名定义

    • WITH t(a, b) AS (...) 语法不被支持。
  5. 不支持递归 CTE

    • WITH RECURSIVE 语法不被支持。
  6. CTE 不能遮盖同名表

    • SQLite 允许 CTE 遮盖同名表,但 Turso 会直接拒绝。
  7. 不支持 MATERIALIZED 提示

    • NOT MATERIALIZED 可被接受(但被忽略),MATERIALIZED 则被拒绝。

三、关键问题示例

sql 复制代码
-- 1. CTE 无法多次引用(失败)
WITH t AS (SELECT 1 AS x) SELECT * FROM t, t AS t2;
-- 错误:no such table: t

-- 2. CTE 内不能使用 UNION(失败)
WITH t AS (SELECT 1 UNION SELECT 2) SELECT * FROM t;
-- 错误:Only SELECT queries are currently supported in CTEs

-- 3. 不能与 INSERT 等同使用(失败)
WITH t AS (SELECT 1 AS x) INSERT INTO table SELECT * FROM t;
-- 错误:WITH clause is not supported

四、修复优先级建议

  1. 关键:CTE 多次引用问题(影响多数常用场景)。
  2. 高 :CTE 内支持复合查询(UNION 等)。
  3. 中:支持 CTE 与 DML 结合、显式列名定义。
  4. 低 :CTE 遮盖表名、MATERIALIZED 提示。
  5. 未来:递归 CTE(明确标记为尚未支持)。

五、其他说明

  • 报告指出 SQLite 本身也不支持 WITH ... INSERT ... RETURNING 语法,因此 Turso 在此方面无需立即为兼容性实现该功能。
  • 存在一个关于递归 CTE 的未合并 PR,但目前非优先事项。

总结

Turso 的 CTE 支持目前处于 基础可用但限制明显 的阶段,适用于简单的查询分解和重用,但无法应对需要多次引用同一 CTE、使用复合查询或与数据修改操作结合的复杂场景。开发团队已识别关键问题并设置了修复优先级。

相关推荐
Decay__2 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说6 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__8 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁9 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk10 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW10 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB10 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_10 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室11 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库