查找路径的递归SQL查询

时间:2015-12-20 05:46:34

标签: sql postgresql unix recursion path

我正在尝试解决这个问题,我给了一个数据库表,例如:create table file(id int,parentid int,name varchar(1024),size int,type 炭(1));

我必须编写一个(递归)数据库查询来列出所有文件的FULL PATH。 [假设文件或目录的类型为“F”或“D”]。您的查询应该为您提供与unix命令类似的输出:“find.-type f”。

我写了类似的东西但是,我不确定这是否是我要求我做的问题,因为我没有经验的Unix。任何帮助将不胜感激。感谢

WITH RECURSIVE search_path (path_ids, length, is_visited) AS 
( 
    SELECT 
        ARRAY[node_id, destination_node_id], 
        link_length, 
        node_id = destination_node_id 
    FROM 
        node_links_view 

    UNION ALL 
    SELECT 
        path_ids || d.destination_node_id, 
        f.length + d.link_length, 
        d.destination_node_id = ANY(f.path_ids) 
    FROM 
        node_links_view d, 
        search_path f 
    WHERE 
    f.path_ids[array_length(path_ids, 1)] = d.node_id 
    AND NOT f.is_visited 
) 
SELECT * FROM search_path 
WHERE path_ids[1] = 1 AND path_ids[array_length(path_ids, 1)] = 6 
ORDER BY length;

0 个答案:

没有答案