Я использую Connect By query для отображения иерархических групп в группе, на этой странице у меня есть Combobox для выбора родительских групп. Но я хочу скрыть все строки, которые содержат группу, которая в настоящее время редактируется.Поиск по пути, который был создан SYS_CONNECT_BY_PATH в Connect By Prior Query
Это мой стол,
GROUPS
-------------
GROUP_ID, GROUP_NAME, GROUP_TYPE, PARENT_ID
Мой первый запрос был;
SELECT * FROM
(SELECT
GROUP_ID,
LPAD('-',LEVEL,'-')|| GROUP_NAME GROUP_NAME,
SYS_CONNECT_BY_PATH(GROUP_NAME, '->') GROUP_NAME_PATH
FROM GROUPS
START WITH PARENT_ID IS NULL AND TYPE='G'
CONNECT BY PRIOR GROUP_ID=PARENT_ID)
Этот результат был по сетке.
27 -Generel Manager ->Generel Manager,
28 --Project Manager ->Generel Manager->Project Manager,
24 ---System Administrator ->Generel Manager->Project Manager->System Administrator
25 ---Software Developer ->Generel Manager->Project Manager->Software Developer
26 ----Intern ->Generel Manager->Project Manager->Software Developer->Intern
Например,
На странице Editgroup.aspx?group_id=24
Он показывает все theese строк, но я хочу, чтобы скрыть все пути строки, которая содержит GROUP_ID = 24 потому, что группа не может быть selfchild.
Я нашел временное решение с этим запросом;
SELECT * FROM
(SELECT
GROUP_ID,
LPAD('-',LEVEL,'-')|| GROUP_NAME GROUP_NAME,
SYS_CONNECT_BY_PATH(GROUP_NAME, '->') || ',' GROUP_NAME_PATH
FROM GROUPS
START WITH PARENT_ID IS NULL AND GROUP_TYPE='G'
CONNECT BY PRIOR GROUP_ID=PARENT_ID)
WHERE HIYERARSI_ID NOT LIKE '%,24,%'
24 исходит из URL.
Я думаю, что это не будет эффективным решением в будущем, когда мы получим большие данные.
Как я могу определить умнее, если путь содержит этот идентификатор или нет?
как о переписывании найти только родители НАЧАТЬ С Child_id = 24 или подобное? – Randy