2015-01-29 3 views
0

В настоящее время я работаю над рекурсивным запросом в базе данных Android SQLite. У меня есть таблица, содержащая активы, которые могут образовывать иерархию, ссылаясь на родителей. Например:Рекурсивный запрос CTE без результата верхнего уровня в 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 

Это работает, но я не рад о финале ИНЕКЕ чтобы отфильтровать исходный элемент. Есть ли другой способ запустить каскад без включения оригинального элемента?

ответ

1

Вы могли бы начать с детьми исходного пункта:

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

Это не совсем ничего проще.

Смежные вопросы