Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Рекурсивные запросы для определения родителя как пример (число прочтений - 1637 )
DartVader
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 13. Марта 2015
Рекурсивные запросы для определения родителя как пример
27. Марта 2017 :: 13:20
Печать  
Приветсвую! Столкнулся с медленной работой встроенных функций, Уровень(), принадлежиГруппе(), есть в прямых запросах УложитьСписокОбъектов, но это тоже не спасло давало все подчиненные элементы.
Почитал про рекурсивные запросы попробовал, работает! Привожу пример может кому пригодится

           |WITH Parts(ParentID, ID, goodsLevel, СотрудникИД) as
           |( 
           |    SELECT mainGoods.ParentID, mainGoods.ID,
           |        0 goodsLevel, спрСотрудники.ParentExt СотрудникИД 
           |    FROM SC14 mainGoods INNER JOIN SC1875 спрСотрудники ON спрСотрудники.SP1873 = mainGoods.ID
           |    WHERE mainGoods.ISFolder = 1 AND mainGoods.ParentID = $ПустойИД
           |    UNION ALL 
           |    SELECT childGoods.ParentID, childGoods.ID, goodsLevel + 1, p.СотрудникИД 
           |    FROM SC14 childGoods
           |        INNER JOIN Parts p 
           |        ON childGoods.ParentID = p.ID AND childGoods.ISFolder = 1
           | ) 
           |SELECT ParentID [родитель $справочник.Товар], ID [Группа $справочник.Товар], goodsLevel,СотрудникИД [Сотрудник $справочник.Сотрудники]   
           |FROM Parts
           |ORDER BY goodsLevel, ParentID, ID
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1537
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Рекурсивные запросы для определения родителя как пример
Ответ #1 - 05. Апреля 2017 :: 12:14
Печать  
Это я вот сейчас не понял. Так можно получить всех родителей заданного элемента на всех уровнях?

Ну и сам отвечу:

Код (SQL)
Выбрать все
WITH ИерархияТоваров(Родитель, БазовыйЭлемент, Товар,  Уровень) as
(
    SELECT тов.ParentID Родитель, тов.ID БазовыйЭлемент, тов.ID Товар, 0 Уровень
    FROM $Справочник.Товары тов
    WHERE тов.ID = '   KM7   '
    UNION ALL
    SELECT ГруппыВыше.ParentID Родитель, Группы.Родитель БазовыйЭлемент, Группы.Товар Товар, Группы.Уровень + 1
    FROM Справочник_Товары ГруппыВыше
        INNER JOIN ИерархияТоваров Группы
       ON Группы.Родитель = ГруппыВыше.ID
 )
SELECT ГруппыТоваров.Родитель, ГруппыТоваров.БазовыйЭлемент, ГруппыТоваров.Товар,  ГруппыТоваров.Уровень, спрТовары.DESCR
FROM ИерархияТоваров ГруппыТоваров, $Справочник.Товары спрТовары
WHERE ГруппыТоваров.БазовыйЭлемент = спрТовары.ID
ORDER BY ГруппыТоваров.Уровень, ГруппыТоваров.Родитель, ГруппыТоваров.БазовыйЭлемент, ГруппыТоваров.Товар
 

  

FormEx developer
Наверх
www  
IP записан
 
DartVader
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 29
Зарегистрирован: 13. Марта 2015
Re: Рекурсивные запросы для определения родителя как пример
Ответ #2 - 11. Апреля 2017 :: 10:40
Печать  
А в 8 ке так нельзя Класс
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать