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

次の 2 つの条件を満たすレコードを選択したいと思います。

  1. フラグ <> -1
  2. フラグ <> -1 を持つ親レコードはありません

これはsqlite3で可能ですか? すなわち。

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 に答える