我知道这是很久以前问过的问题,但是对于当前的 SQLite 版本来说,这样做很简单,并且不需要级别深度,正如 @Bill-Karwin 所说。所以应该重新考虑正确的答案:)
我的表有列 MCTMPLID 和 REF_TMPLID,我的结构起始节点称为 ROOT
CREATE TABLE MyStruct (
`TMPLID` text,
`REF_TMPLID` text
);
INSERT INTO MyStruct
(`TMPLID`, `REF_TMPLID`)
VALUES
('Root', NULL),
('Item1', 'Root'),
('Item2', 'Root'),
('Item3', 'Item1'),
('Item4', 'Item1'),
('Item5', 'Item2'),
('Item6', 'Item5');
这是构建树结构的主要查询
WITH RECURSIVE
under_root(name,level) AS (
VALUES('Root',0)
UNION ALL
SELECT tmpl.TMPLID, under_root.level+1
FROM MyStruct as tmpl JOIN under_root ON tmpl.REF_TMPLID=under_root.name
ORDER BY 2 DESC
)
SELECT substr('....................',1,level*3) || name as TreeStructure FROM under_root
这是结果
Root
...Item1
......Item3
......Item4
...Item2
......Item5
.........Item6
我确信可以修改它以适应 tik OP 的表结构,所以让这个示例作为起点
文档和一些示例https://www.sqlite.org/lang_with.html#rcex1 https://www.sqlite.org/lang_with.html#rcex1