Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выборка дочерних объектов узла дерева с анализом вхождения в другие узлы дерева. запутался  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
..MSSQL2005
вопрос вот в чем - делаю выборку по дочерним объектам узла дерева и дополнительно хочу проверять каждый из них на вхождение в другие родительские объекты (узлы дерева) - если пришедший объект дополнительно имеет несколько родителей (несколько вхождений), только одного, определенного типа, выпускать его наружу - иначе нет

--базовый запрос
Select rw.id as Obj_Id,
         tl.id as Link_Id 
    From lsdbo.object_type tw inner join lsdbo.object_reference rw on rw.type_id=tw.id inner join 
         lsdbo.tree_link tl on rw.id=tl.link_id and tl.link_filial_id=1 
   Where tl.parent_id =100004703200000 --базовый родительский объект (узел дерева)

--позапрос для фильтра результатов первого запроса
   Select count(*)as count,
         tw.mnemo as mnemo
    From lsdbo.object_type tw inner join lsdbo.object_reference rw on rw.type_id = tw.id  inner join
         lsdbo.tree_link tl on rw.id = tl.parent_id and tl.link_filial_id = 1  
   Where tl.link_id =100000456700039 --анализируемый Obj_Id из первого запроса
Group by tw.mnemo

   Select count(*)as count,
         tw.mnemo as mnemo
    From lsdbo.object_type tw inner join lsdbo.object_reference rw on rw.type_id = tw.id  inner join
         lsdbo.tree_link tl on rw.id = tl.parent_id and tl.link_filial_id = 1  
   Where tl.link_id =100000940600039 --анализируемый Obj_Id из первого запроса
Group by tw.mnemo

первый запрос ищет данные, например так
Obj_Id Link_Id
100000456700039 100001635300023
100000940600039 100001789900039
....

подзапросы, Второй и третий, для примера, на основе поступающих данных столбца Obj_Id, должен выступить в роли фильтра для принятия решения, использовать это значение в итоговой таблице или нет, на основе следующих данных

результат второго и третьего подзапроса соответственно
count mnemo
2 Reqs
1 ПлРб
1 Экс
в данном случае значение ложно т.к. содержит вхождения в разные типы узлов дерева кроме разрешенного ('Экс') - соответственно Obj_Id - нельзя использовать в итогах

count mnemo
4 Экс
в данном случае значение истинно т.к. содержит вхождения в разрешенный тип родителя ('Экс') - соответственно Obj_Id - можно использовать в итогах

т.е. в итоге один запрос с фильтром должен вернуть (для этого примера) только одно значение
Obj_Id Link_Id
100000940600039 100001789900039
....

проблема в том что - не могу понять можно ли данную задачу реализовать в одном запросе? и как объединить в этом случае запрос и фильтр? не подскажите?
17 июн 11, 11:38    [10826818]     Ответить | Цитировать Сообщить модератору
 Re: выборка дочерних объектов узла дерева с анализом вхождения в другие узлы дерева. запутался  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
если другими словами то - запрос ищет всех детей и у каждого из них проверяет всех родителей - если они нужного типа то ок если нет то нет
17 июн 11, 11:48    [10826922]     Ответить | Цитировать Сообщить модератору
 Re: выборка дочерних объектов узла дерева с анализом вхождения в другие узлы дерева. запутался  [new]
ef1
Member

Откуда: Москва
Сообщений: 191
в принципе все решил через внешний vbscript скрипт - сначала набрал массив детей - по нему пробежался и проверил родителей - конечно немного не то - но работает и ладно
зы
в общем тема закрыта
17 июн 11, 14:01    [10828236]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить