Для SQL Server: Список смежных и вложенных наборов: SQL Server
Для доступа Jet / MS рекурсивные запросы не являются опцией, поэтому вложенные наборы был бы способ пойти.Для примера: http://www.mvps.org/access/queries/qry0023.htm
Некоторые сведения о вложенных наборах:
Для реализации решения с вложенными наборами вам потребуется добавить и поддерживать два дополнительных столбца в таблице: Lt
и Rt
(слева и справа соответственно).Вы заполняете эти столбцы, выполняя измененный обход дерева предзаказа для назначения значений этим столбцам.Это легче всего сделать с помощью рекурсивной функции.Затем вы можете использовать левое и правое значения для определения потомков во время SELECT.
Компромисс требует большей обработки при изменении данных, но намного быстрее при получении данных.
Эта концепция в некоторой степени не интуитивна и, конечно, имеет кривую обучения, но я лично использовал ее для достижения большого эффекта.Насколько я знаю, это единственный способ выполнить то, что вы делаете, после использования только запросов SELECT в Jet (механизм обработки базы данных MS Access).
Пример решения с вложенным множеством:
ParentID ID Lt Rt RowNumber(Reference)
Null 1 1 18 0
1 2 2 13 1
2 4 3 10 2
4 3 4 9 3
3 5 5 6 4
1 6 14 17 5
6 7 15 16 6
2 8 11 12 7
3 9 7 8 8
Затем, чтобы получить всех потомков идентификатора 2
:
SELECT * FROM Tbl WHERE Lt Between 2 And 13
Вот как графически выглядит дерево: