SQLite递归查询返回文件路径

时间:2016-07-19 17:44:50

标签: sql sqlite

目前我正在开发一个应用程序,它必须在数据库中存储文件层次结构(文件夹和文件不可区分)。对于此创建的下表:

tbl_files
----------------------------------
|   id   |   name   |   parent   |
----------------------------------

父字段是tbl_files本身的外来字段。主目录的标识为root。我现在想要获取文件的路径,直到到达根目录。我想用递归的SQL查询来做这个,但我不知道如何从数据库“返回”路径。

递归查询还可以,还是不好的做法?我应该如何使用此查询“生成”路径?

1 个答案:

答案 0 :(得分:4)

要获取路径条目,请使用recursive CTE。 要合并名称,请使用group_concat()

WITH RECURSIVE path(level, name, parent) AS (
    SELECT 0, name, parent
    FROM tbl_files
    WHERE id = @MyFileID
    UNION ALL
    SELECT path.level + 1,
           tbl_files.name,
           tbl_files.parent
    FROM tbl_files
    JOIN path ON tbl_files.id = path.parent
),
path_from_root AS (
    SELECT name
    FROM path
    ORDER BY level DESC
)
SELECT group_concat(name, '/')
FROM path_from_root;