Запрос для суммирования данных в поддереве? - PullRequest
2 голосов
/ 07 марта 2009

Мои данные естественно соответствуют форме дерева. Поэтому у меня есть простая таблица SQL для хранения данных: {id, parentid, data1, ..., dataN}

Я хочу иметь возможность «увеличивать» данные и создавать отчет, который обобщает данные, найденные ниже текущей ветви. То есть, стоя в корне, я хочу получить итоговые данные всех данных. Когда я путешествую по определенной ветви дерева, я хочу, чтобы суммирование данных было найдено только для этого узла и его дочерних узлов.

Как мне написать такой запрос в SQL?

Заранее спасибо!

/ John

Ответы [ 2 ]

2 голосов
/ 07 марта 2009

Поскольку sqlite не поддерживает CONNECT BY, вы не сможете выполнить этот расчет в одном запросе, если не используете вложенных наборов или материализованных путей для своих данных.

В качестве альтернативы, выполните трудный путь и рекурсивно пройдитесь по дереву, по одному запросу для каждого дочернего узла, начиная с интересующего его родителя.

Также см .:

1 голос
/ 07 марта 2009

Ссылка Влада на вложенные множества выглядит довольно хорошо. Если вы хотите что-то более подробное, чтобы охватить деревья и иерархии, вы также можете обратиться к книге Джо Селко .

Модель списка смежности «ID, ParentID» на самом деле является «устаревшим» способом рассмотрения иерархий в модели реляционной базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...