我有以下 SQL 架构:
CREATE TABLE Folders(
id INTEGER PRIMARY KEY,
path TEXT NOT NULL,
level INTEGER DEFAULT 0,
parentId INTEGER)
parentId != NULL 的项目是根项目,并且在“路径”中具有完整路径。子文件夹仅按其名称和描述它们位于根文件夹下方的级别来保存。我现在想为此数据构建所有项目的完整路径。
CTE 在 SQLite 中不可用,所以我创建了这个查询来获取项目的完整路径:
select f.id, ifnull(group_concat(p.path, '\')||'\', '')||f.path as path
from folders f
left outer join (select * from folders order by parentId, level) p on (p.parentId=f.parentId or p.id=f.parentId) and p.level < f.level
group by f.id
然而,当我用“解释”查看执行计划时,这似乎效率很低。我在 parentId、路径和级别上创建了一个索引,但这似乎并没有太大改善。
我试图检查http://www.sitepoint.com/article/hierarchical-data-database/但它有重定向问题。