我目前正在研究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页面中的示例来实现这一点:
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子句不满意。是否有其他方法可以在不包含原始项目的情况下启动级联?
答案 0 :(得分:1)
您可以从原始项目的子项开始:
WITH RECURSIVE
Child(AssetId) AS (
SELECT AssetId FROM Assets WHERE ParentAssetID = 1
UNION ALL
SELECT ...
)
SELECT AssetId FROM Child
这实际上并不简单。