不带CTE的SQLite 3树列表

不带CTE的SQLite 3树列表,sqlite,common-table-expression,Sqlite,Common Table Expression,我修改了一个SQL语句来使用SQLite 3。但不幸的是,公共表表达式和WITH子句只在SQLite 3.6中起作用,但是我的开源应用程序的用户正在使用SQLite 3.2,我不能强迫他们更新整个Linux系统以获得新的软件包。是否可以在不使用CTE和“With”子句的情况下仅使用SQL语言来调整代码以使其工作 代码如下: WITH cte AS (SELECT 0 AS level, collectionID, collectionName, parentCollectionID,

我修改了一个SQL语句来使用SQLite 3。但不幸的是,公共表表达式和WITH子句只在SQLite 3.6中起作用,但是我的开源应用程序的用户正在使用SQLite 3.2,我不能强迫他们更新整个Linux系统以获得新的软件包。是否可以在不使用CTE和“With”子句的情况下仅使用SQL语言来调整代码以使其工作

代码如下:

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
非常感谢你, 顺致敬意,
Christian

CTE被添加到SQLite中,因为它们不能与任何其他SQL语言构造进行模拟

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

您可以使用递归内联函数进行尝试。不过,不知道SQLite是否支持这一点。嗨,Florian Schmidinger,我从未使用过内联函数。拜托,我该怎么做?拜托Florian Schmidinger,我该怎么向你发送数据?好的Florian Schmidinger,我用你需要的信息编辑了这个问题;)让我们一起来吧。非常感谢你,CL。我会用我使用的编程语言检查这是否可行;)