У меня есть heirarchical таблицу в форматеУдаление дубликатов поддеревьев из CONNECT-BY запроса в оракула
CREATE TABLE tree_hierarchy (
id NUMBER (20)
,parent_id NUMBER (20)
);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (2, 1);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (4, 2);
INSERT INTO tree_hierarchy (id, parent_id) VALUES (9, 4);
При запуске запроса: -
SELECT id,parent_id,
CONNECT_BY_ISLEAF leaf,
LEVEL,
SYS_CONNECT_BY_PATH(id, '/') Path,
SYS_CONNECT_BY_PATH(parent_id, '/') Parent_Path
FROM tree_hierarchy
WHERE CONNECT_BY_ISLEAF<>0
CONNECT BY PRIOR id = PARENT_id
ORDER SIBLINGS BY ID;
Результат я получаю, как это: -
"ID" "PARENT_ID" "LEAF" "LEVEL" "PATH" "PARENT_PATH"
9 4 1 3 "/2/4/9" "/1/2/4"
9 4 1 2 "/4/9" "/2/4"
9 4 1 1 "/9" "/4"
Но мне нужен Oracle Sql запрос, который получает меня только этот
Это более простой пример. У меня есть более 1000 записей таким образом. Когда я запускаю указанный выше запрос, он генерирует много дубликатов. Может ли кто-нибудь дать мне общий запрос, который даст полный путь от листа к корень без дубликатов. Спасибо за помощь заранее
Спасибо за ваш reply.But В моем случае это не будет work.Your решения требует корня быть известным в advance.In моего случай, дб может иметь несколько корней и я хотите, чтобы все возможные комбинации листьев и корневых цепей были исключены из дубликатов. – Dilip
Однако дубликатов нет. В результате вашего запроса нет дублированных строк. Он возвращает полный путь для ВСЕХ листьев. Итак, вам нужно подумать о еще одном состоянии, которое вернет только нужную вам строку. Возможно, я не понял этот вопрос четко, но попытаюсь найти эти пути не от родителя к детям, а в противоположном направлении и начинать с листьев. Я думаю, это то, что вам нужно. – bdshadow