【问题标题】:Recursive CTE query without top level result in SQLiteSQLite中没有顶级结果的递归CTE查询
【发布时间】:2015-01-29 14:41:29
【问题描述】:

我目前正在对 Android SQLite 数据库进行递归查询。我有一个包含资产的表,它可以通过引用父级来形成层次结构。例如:

AssetId | ParentAssetId      1--2--5
-----------------------      |  |
      1 | NULL               |  |--6--8
      2 | 1                  |  |  |
      3 | 1                  |  |  |--9
      4 | 1                  |  |
      5 | 2                  |  |--7
      6 | 2                  |
      7 | 2                  |--3
      8 | 6                  |
      9 | 6                  |--4--10
     10 | 4            

我需要找到给定起点的所有后代,但不包括起点。例如:

1 = 2,3,4,5,6,7,8,9,10
2 = 5,6,7,8,9
6 = 8,9

我使用 SQLite 页面中的示例成功地完成了这项工作:

SQLite WITH page

WITH RECURSIVE
Child(AssetId) AS (
VALUES (1)
UNION
SELECT Assets.AssetId FROM Assets, Child
WHERE Assets.ParentAssetID = Child.AssetId)
SELECT AssetId FROM Child WHERE AssetId != 1

这可行,但我对最后的 WHERE 子句过滤掉原始项目不满意。有没有其他方法可以在不包括原始项目的情况下启动级联?

【问题讨论】:

    标签: android sqlite recursion common-table-expression


    【解决方案1】:

    您可以从原始项目的子项开始:

    WITH RECURSIVE
    Child(AssetId) AS (
      SELECT AssetId FROM Assets WHERE ParentAssetID = 1
      UNION ALL
      SELECT ...
    )
    SELECT AssetId FROM Child
    

    这并不简单。

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2015-10-29
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多