SQL: рекурсивно выбрать сумму всех дочерних записей - PullRequest
3 голосов
/ 25 февраля 2010

У меня есть таблица, которая имеет отношение один ко многим с собой. Каждая запись может иметь n детей из этой же таблицы. Например

create table folder
ID: Number 20 PK
PARENT_ID: Number 20 FK references folder.ID
SIZE: NUMBER 20
...

Учитывая идентификатор, я хочу выбрать СУММУ (РАЗМЕР) всех записей папки рекурсивно. Целевой базой данных является MySql 5, но было бы неплохо если он достаточно универсален для работы в Oracle и MS-SQL.

Я не знаю, насколько глубоко дерево, может быть 1 уровень, может быть 50 (или более)

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Это может быть некоторая помощь: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

Это будет простой запрос в Oracle (http://download -east.oracle.com / docs / cd / B12037_01 / server.101 / b10759 / questions003.htm ), поскольку он поддерживает иерархические запросы с использованием «CONNECT BY», но я не думаю, что есть сопоставимое решение для MySQL. Похоже, что вы собираетесь сделать что-то действительно неэффективное или вам придется изменить структуру таблицы, чтобы поддерживать эту конкретную функцию.

1 голос
/ 25 февраля 2010

Одним из решений было бы добавить столбец в таблицу "topmost_parent" и присоединиться к нему.

0 голосов
/ 25 февраля 2010

Вы должны рассмотреть возможность реструктуризации данных с использованием модели вложенного множества. Следующая ссылка описывает, как это сделать:

http://www.vbmysql.com/articles/database-design/managing-hierarchical-data-in-mysql

...