我正在编写一个程序,我在syBase中设置了一个文件系统我想找到包含我在其中指定的文件的所有文件,然后我希望它找到包含所有这些文件的所有文件在它等等。
现在我的代码工作并返回我想要的所有文件但是我想要一个更优雅的版本,因为目前它有很多重复代码并且无论如何都不包括所有文件。
我试过循环,但我没有太多运气。
INSERT #nodes
SELECT from_file
FROM file_map
WHERE to_file = @fileNode
insert #fileList
SELECT DISTINCT file
from #nodes
INSERT #nodes1
SELECT from_file
FROM file_map m
INNER JOIN #nodes n ON m.to_file = n.file
WHERE m.to_file LIKE '/%'
INSERT #fileList
SELECT DISTINCT file
FROM #nodes1
INSERT #nodes2
SELECT from_file
FROM file_map m
INNER JOIN #nodes1 n ON m.to_file = n.file
WHERE m.to_file LIKE '/%'
INSERT #fileList
SELECT DISTINCT file
FROM #nodes2
INSERT #nodes3
SELECT from_file
FROM file_map m
INNER JOIN #nodes2 n ON m.to_file = n.file
WHERE m.to_file LIKE '/%'
INSERT #fileList
SELECT DISTINCT file
FROM #nodes3
这是一个非常简单的程序,我无法弄清楚如何使这个更整洁/更快。
这只是一个例子,系统可能会像30个文件一样深,所以我不想创建30个临时表。
答案 0 :(得分:0)
您要做的是从层次结构中检索数据。可以改进您的解决方案,但您可能需要对数据库进行一些更改。有一篇关于SitePoint的文章,标题Storing Hierarchical Data in a Database解释了这个概念,非常清楚。
答案 1 :(得分:0)
存储过程应该能够处理递归(虽然我不熟悉Sybase)。我不完全确定您的架构是什么样的,但您可以使用递归来保持代码精简(有时以性能为代价)。您需要维护一组访问过的文件,以避免无限循环。