Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизОбход связанных 2-х таблиц - с шапкой и детализацией Найти похожие ветки
← →
Sergeyy (2002-10-14 12:10) [0]Есть 2 таблицы рецептов:
1. Заголовочная. MASTER(ID, INGRED_ID, UNIT_ID, DAT);("рецепт")
2. Детализация. DETAILS(MASTER_ID, INGRED_ID, UNIT_ID, AMOUNT);
MASTER.ID = DETAILS.MASTER_ID
Проблема в том, что каждый ингредиент, участвующий в детализации может иметь для себя такую же шапку и быть далее расписан на неограниченное количество вложений. Как мне наилучшим способом пройтись по все этим таблицам и получить список всех ингридиентов, участвующих в заданном рецепте, независимо от уровня вложенности.
База связязано с клиентским приложением через ADO Jet.
← →
passm (2002-10-14 13:17) [1]Sergeyy © (14.10.02 12:10)> ???
Тебе рекурсивный запрос нужен?
← →
Sergeyy (2002-10-14 15:42) [2]2 passm
Думаю, что, рекурсивный. В Access это можно сделать? (желательно в чистом SQL)
← →
passm (2002-10-14 16:50) [3]Sergeyy © (14.10.02 15:42)> Для Access"а ИМХО никак :-(
Можно написать процедуру/функцию:
procedure MyProc(Query: TQuery; const FieldID, FieldName, FieldChildCount, ParamParent: string; List: TStringList);
var
i, j: Integer;
begin
Query.First;
while not(Query.Eof) do
begin
List.Add(Query.FieldByName(FieldName).AsString);
if Query.FieldByName(FieldChildCount).AsInteger > 0 then
begin
i:= Query.FieldByName(FieldID).AsInteger;
j:= Query.ParamByName(ParamParent).AsInteger;
Query.ParamByName(ParamParent).AsInteger:= Query.FieldByName(FieldID).AsInteger;
Query.Close;
Query.Open;
MyProc(Query, FieldID, FieldName, FieldChildCount, ParamParent, List);
Query.ParamByName(ParamParent).AsInteger:= j;
Query.Close;
Query.Open;
Query.Locate(FieldID, i, [])
end;
Query.Next
end
end;
И запрос:
SELECT T1.ID, T1.NAME, T1.PARENT
FROM TABLE1 AS T1
WHERE T1.PARENT = :PARENT
P.S. Вместо List можно использовать редактируемый набор данных (например, Query, возвращающий пустой набор данных с нужными полями).
← →
MMF (2002-10-14 16:57) [4]Sergeyy © (14.10.02 12:10)
фактически, ты работаешь с деревом неопределенной глубины. Почитай http://sdm.viptop.ru/articles/sqltrees.html
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c