使用WITH子句存储临时数据:Oracle语法的SQLite等价写法是什么?
Oracle WITH子句存储临时数据语法的SQLite等价写法
SQLite 3.8.3及以上版本原生支持WITH公共表表达式语法,和给出的Oracle写法只有一处核心差异:SQLite没有Oracle内置的dual虚拟表,查询常量行时不需要加FROM dual子句,其余逻辑完全兼容。
直接可用的等价SQL写法如下:
WITH data(asset_id, x, y) AS ( SELECT 100, 10, 20 UNION ALL SELECT 200, 30, 40 UNION ALL SELECT 300, 50, 50 ) SELECT * FROM data;
执行后返回的结果和Oracle运行结果完全一致:
| asset_id | x | y |
|---|---|---|
| 100 | 10 | 20 |
| 200 | 30 | 40 |
| 300 | 50 | 50 |
如果你使用的是3.8.3之前不支持WITH语法的极老旧SQLite版本,可以用子查询构造临时数据集实现相同效果,写法如下:
SELECT * FROM ( SELECT 100 AS asset_id, 10 AS x, 20 AS y UNION ALL SELECT 200, 30, 40 UNION ALL SELECT 300, 50, 50 ) AS data;
注意:不要为了兼容Oracle习惯在SQLite中手动创建
dual表,无意义增加冗余对象,直接省略FROM dual是SQLite的标准写法。
内容的提问来源于stack exchange,提问作者User1974
相关产品推荐
相关产品推荐

