我修改了一条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/