从文件夹列表中找出所有顶级文件夹

有数据库表TBLFOLDERS,数据如下所示:

FLDR

C:\Folder1

C:\Folder1\Subfolder1

C:\Folder1\Subfolder2

C:\Folder2\Subfolder1

C:\Folder1 (顶级 1

C:\Folder1\Subfolder1 (顶级 1 的下级)

C:\Folder1\Subfolder2 (顶级 1 的下级)

C:\Folder2\Subfolder1 (顶级 2

有些是顶级目录,如顶级 1 和顶级 2,标志是下面有子目录。现在要找出所有的顶级目录。

这道题用自然思维去理解其实并不难,如果其他各串不是当前串的子串(只比头部),则说明该串是个顶级文件夹。比如,没有任何其他串是C:\Folder1的子串,C:\Folder1是个顶级文件夹,而C:\Folder1C:\Folder1\Subfolder1的子串,则C:\Folder1\Subfolder1不是顶级文件夹。但是SQL要完成这样的嵌套循环非常难写,或用关联子查询的写法也不直观、很难理解。

用开源集算器的SPL就很容易写:


A

1

=connect("mssql")

2

=A1.query@x("SELECT * FROM TBLFOLDERS")

3

=A2.select((x=#,y=#1,!A2.select@1(#!=x && pos@h(y,#1))))

SPL是专业的数据计算引擎,基于有序集合设计,提供了完善的集合运算,相当于JavaSQL优势的结合,很容易处理这种嵌套循环问题。

 

问答搜集

https://stackoverflow.com/questions/64125262/how-do-i-use-sql-to-select-only-top-level-folders-from-a-table-of-folders