Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Рекурсия?
|
|||
|---|---|---|---|
|
#18+
День добрый. Задача вроде простоая- но вот сижу голову ломаю.. Есть таблица соответствия между элементами Типа два первых поля индефикаторы элементов, третье коэф. соответствия: with (a,b,cnt) Элемент1,Элемент2,1 Элемент1,Элемент3,2 Надо сделать выборку всей соответствий, те результат такой: Элемент1,Элемент2,1 Элемент1,Элемент3,2 Элемент2,Элемент1,1 Элемент3,Элемент1,0.5 Элемент3,Элемент2,0.5 Элемент2,Элемент3,2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 23:25 |
|
||
|
Рекурсия?
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что в рекурсии нельзя сделать двойную выборку из родителя: with d0(a,b,cnt) as ( SELECT t1.a,t1.b,t1.cnt FROM elements t1 UNION ALL SELECT t1.b,t1.a,1/t1.cnt FROM elements t1 ), d1(a,b,cnt,lvl) as ( select d0.a,d0.b,d0.cnt,1 from d0 UNION ALL ( select t1.a,t2.a,t1.cnt/t2.cnt,t1.lvl+1 from d1 as t1, d1 as t2 where t1.b=t2.b and t1.a!=t2.a (t1.a,t2.a) not in (select a,b from d1) ) ) select * from d1 ; Ругается "from d1 as t1, d1 as t2" на это место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2007, 23:29 |
|
||
|
Рекурсия?
|
|||
|---|---|---|---|
|
#18+
with elements(a,b,cnt) as ( VALUES ('Элемент1','Элемент2',1.0), ('Элемент1','Элемент3',2.0), ('Элемент3','Элемент4',1.0), ('Элемент4','Элемент5',1.0) ), d0(a,b,cnt) as ( SELECT t1.a,t1.b,t1.cnt FROM elements t1 UNION ALL SELECT t1.b,t1.a,1/t1.cnt FROM elements t1 ), d1(a,b,cnt,lvl) as ( select d0.a,d0.b,cast(d0.cnt as double),1 from d0 UNION ALL ( select t1.a,t2.a,case when t2.cnt=0 then 0 else t1.cnt/t2.cnt end,t1.lvl+1 from d1 as t1, d0 as t2 where t1.b=t2.b and t1.a!=t2.a and (t1.a,t2.a) not in (select a,b from d0) and lvl<10 ) ) select * from d1 ; с двумя элементами - ок, с 3 уровнями рекурсии входит в штопор:( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 00:39 |
|
||
|
Рекурсия?
|
|||
|---|---|---|---|
|
#18+
Тихо сам с собой веду беседу:) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. вариант. вроде работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2007, 03:16 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=116&tid=1604694]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 344ms |

| 0 / 0 |
