Используя SQLite, у меня есть подозрительный случай рекурсивных данных с циклом - другими словами, дочерний узел также является его собственным дедушкой. Симптомом, конечно же, является бесконечный циклНевозможно обнаружить циклические данные в базе данных SQLite
Я знаю, как Oracle и Postgresql обрабатывают циклические данные; но не нашли никакого способа сделать это с помощью SQLite. Ниже приведен пример данных с циклом. Если вы удалите последнюю «строку» в таблице наборов данных, она будет работать. Как написано, он переходит в бесконечный цикл.
with DataSet as
(
select 'A' as node, null as parent union all
select 'B' as node, 'A' as parent union all
select 'C' as node, 'B' as parent union all
select 'D' as node, 'C' as parent union all
select 'A' as node, 'D' as parent
),
Hierarchy(node, parent, level, path)
as
(
select DataSet.node,
DataSet.parent,
1 as level,
'/' || DataSet.node as path
from DataSet
where DataSet.parent is null
union all
select DataSet.node,
DataSet.parent,
Hierarchy.level + 1 as level,
Hierarchy.path || '/' || DataSet.node as path
from Hierarchy
join DataSet
on DataSet.parent = Hierarchy.node
)
select *
from Hierarchy
order by path
;
Ваш подход не работает, поскольку запрос находится в цикле и не может завершить его, чтобы удалить дубликат. Я попробовал это, чтобы быть уверенным. – user172431
Обратите внимание на первые три слова моего ответа. –