sqlite - 没有CTE的SQLite 3树形列表

标签 sqlite common-table-expression

我修改了一条SQL语句以与SQLite 3配合使用。但是不幸的是,通用表表达式和WITH子句仅在前面的SQLite 3.6中可用,但是我的开源应用程序的用户正在使用SQLite 3.2,并且我不能强迫他们将整个Linux系统更新为获取新软件包。是否可以仅使用SQL语言而不使用CTE和“ With”子句来使代码适应工作?

这是代码:

WITH 
cte AS 
   (SELECT 0 AS level, collectionID, collectionName, parentCollectionID, CAST(collectionID AS VARCHAR(128)) AS Sort
           FROM collections WHERE parentCollectionID IS NULL
    UNION ALL
    SELECT p.level + 1, c.collectionID, c.collectionName, c.parentCollectionID, CAST(p.Sort || '/' || CAST(c.collectionID AS VARCHAR) AS VARCHAR(128))
          FROM collections c
          INNER JOIN cte p ON p.collectionID = c.parentCollectionID)
SELECT 
collectionID, 
printf('%*s', level * 4, '') || collectionName AS collectionName, 
Sort,
parentCollectionID 
FROM cte
ORDER BY Sort;


结果如下:

collectionID    collectionName            Sort     parentCollectionID
1               Dissertação               1        0
10              Filosofia Reformacional   10       0
11              Dooyeweerd                11       0
14              ZotPad favorites          14       0
15              Diversos                  15       0 
2               Bíblia                    2        0
3               Políticas Públicas        3        0
4               Zotero                    4        0
5               Linux                     5        0   
6               Tese Doutorado            6        0
12                  Pontal Do Paraná      6/12     6
7                   Multimodal            6/7      6
13                     Modalidades        6/7/13   7
8                      Base Histórica     6/7/8    7
9              Artigo Weber               9        0


非常感谢,
最好的祝福,
基督教

最佳答案

将CTE添加到SQLite中是因为它们不能用任何其他SQL语言构造进行仿真。

建议使用SQLite库的方法不是链接到操作系统随附的某个随机版本,而是直接将sqlite3.c文件的副本添加到您的应用程序中。
这样可以防止版本和配置冲突。

关于sqlite - 没有CTE的SQLite 3树形列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253445/

相关文章:

java - 为什么在数据库 android 中进行查询后调用 moveToFirst()

mysql - 您可以使用 MySQL 连接到独立数据库吗? "mydata.db"?

mysql - EXISTS 中的递归 CTE 查询

sql - 用 'WITH RECURSIVE' 计算总价

sql - 删除重复行 SQL Server?

postgresql - 寻找递归查询的更简单替代方法

c# - 使用 LINQ 检索数据

c# - 如何在 ListView 中选择一条记录并在代码隐藏方法中引用它?

sqlite - 在sqlite不同数据库中触发

sql - 递归 CTE 检查记录是否存在于任何级别,然后获取所有子级(文件夹结构)