|
|
|
Обход дерева (выбрать все связи), Oracle12с
|
|||
|---|---|---|---|
|
#18+
Есть схема связи документов (входящие-исходящие письма): При создании новой связи документа 1 с документом 2 в таблицу пишется 2 строки: Код: plaintext 1. 2. 3. При установлении связи с документом, который уже имеет историю (проверяю наличие PARENT_ID) в таблицу пишется только одна запись: Код: plaintext 1. 2. История связей: обернул данные в with Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Необходимо получать ВСЮ историю связей по любому из ID документа, допустим, ID = 273. В примере есть 2 строки ( t1.PK IN (1, 8) ) которые не должны выводиться - это история другого документа. Немного о попытках В части решения средствами SQL набрёл на не плохую статью с парой примеров, но применить на практике так и не получилось.. 1) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 2) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 18:32 |
|
||
|
Обход дерева (выбрать все связи), Oracle12с
|
|||
|---|---|---|---|
|
#18+
Ora uSeR, Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 18:40 |
|
||
|
Обход дерева (выбрать все связи), Oracle12с
|
|||
|---|---|---|---|
|
#18+
Ora uSeR, Поскольку интересуют ВСЕ связанные документы безотносительно направления связи, то это задача на ненаправленном графе. Подобные задачи на SQL нормально не решаются. Относительно эффективно в SQL можно решать только задачи на напраленных (где проход допустим только в направлении связи) структурах, будь то дерево или граф. connect by может вернуть все связанные но это будет крайне избыточный перебор Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Нормальный подход в таких случаях это обход графа к глубину, который использует список посещенных узлов. Механизм rec with тоже непригоден для поддержания списка обойденных, то есть только PL/SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 19:10 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39715090&tid=1883353]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 432ms |

| 0 / 0 |
