不带CTE的SQLite 3树列表
我修改了一个SQL语句来使用SQLite 3。但不幸的是,公共表表达式和WITH子句只在SQLite 3.6中起作用,但是我的开源应用程序的用户正在使用SQLite 3.2,我不能强迫他们更新整个Linux系统以获得新的软件包。是否可以在不使用CTE和“With”子句的情况下仅使用SQL语言来调整代码以使其工作 代码如下:不带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,
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
非常感谢你,
顺致敬意,
ChristianCTE被添加到SQLite中,因为它们不能与任何其他SQL语言构造进行模拟 使用SQLite库的推荐方法不是链接到操作系统附带的某个随机版本,而是直接将
sqlite3.c
文件的副本添加到应用程序中。
这可以防止版本和配置冲突。您可以使用递归内联函数进行尝试。不过,不知道SQLite是否支持这一点。嗨,Florian Schmidinger,我从未使用过内联函数。拜托,我该怎么做?拜托Florian Schmidinger,我该怎么向你发送数据?好的Florian Schmidinger,我用你需要的信息编辑了这个问题;)让我们一起来吧。非常感谢你,CL。我会用我使用的编程语言检查这是否可行;)