1

假设我有这张桌子:

Parent         ID         FileName                 Flag
0              1          C:\                      -1
1              2          C:\Test\                 0
2              3          C:\Test\Test2\           0
3              4          C:\Test\Test2\file.txt   0
0              5          D:\                      0
5              6          D:\file-2.txt            0

我想选择满足这两个条件的记录:

  1. 标志 <> -1
  2. 没有父记录具有标志 <> -1

这在 sqlite3 中可能吗?IE。

SELECT FileName FROM MyTable WHERE Flag <> -1 And Recursive(Parent) <> -1

所以在示例表中,这样的查询将返回D:\file-2.txt,但不是 C:\Test\Test2\file.txt

4

1 回答 1

1

SQLite 没有任何机制可以在任意深度上进行递归查找。
您必须以访问数据库的任何语言来实现此逻辑。

在此特定示例中,您可以尝试根据文件名进行查找:

SELECT FileName
FROM MyTable A
WHERE Flag <> -1
  AND NOT EXISTS (SELECT ID
                  FROM MyTable B
                  WHERE SUBSTR(B.FileName, -1) = '\'
                    AND A.FileName LIKE B.FileName || '%'
                    AND B.Flag = -1)
于 2012-11-14T09:12:09.823 回答