CTE, чтобы получить всех детей (потомков) родителей
мы эту проблемуу меня болит голова ...
Скажи яу нас есть таблица с несколькими тысячами строк, и структура таблицы состоит из родительского элемента -> детские отношения.
Отношения могут идти до 6 уровней. Вот's образец структуры таблицы:
ProductId | ParentId | Levels
1174 0 1174
311 1174 311, 1174
1186 311 1186, 311, 1174
448 1186 448, 1186, 311, 1174
3365 448 3365, 448, 1186, 311, 1174
У нас есть процесс, который проходит через всю таблицу, чтобы получить отношения и сохраняет "уровни» столбец, этот процесс очень медленно (из-за петель), и ямы пытались установить отношения, но потерпели неудачу.
Пока ямы пробовали это, но это не такделать то, на что я надеялся, а также, похоже, реплицировать строки ...
;With Parents(ProductId, ParentId, Levels)
As(
Select ProductId, ParentId, Levels
From Products
Where ParentId = 0
Union All
Select p.ProductId, p.ParentId, p.Levels
From Products p
Join Parents cte On cte.ProductId = p.ParentId
)
Select *
From Parents
Как я упоминал ранее, у нас есть процесс, который зацикливает таблицу, он выполняет свою работу, но это может занять до 30 минут, мой вопрос, есть ли лучший способ сделать это? я знаю, что CTE позволяет мне это делать, но я отстой, и столбец уровней должен быть рассчитан и обновлен в таблице, это возможно?
Вот'сSqlfiddle в случае, если кто-то может помочь, спасибо!