у меня есть следующие таблицы:
Actual Optional
------ --------
4 3
13 6
20 7
26 14
19
21
27
28
Что мне нужно сделать, это выбрать:
1) все значения из «фактической» таблицы.
2) выберите значения из таблицы «Необязательно», если они образуют последовательный
серия с «фактическими» табличными значениями
Ожидаемый результат:
Answer
------
4
13
20
26
3 --because it is consecutive to 4 (i.e 3=4-1)
14 --14=13+1
19 --19=20-1
21 --21=20+1
27 --27=26+1
28 --this is the important case.28 is not consecutive to 26 but 27
--is consecutive to 26 and 26,27,28 together form a series.
Я написал запрос с использованием рекурсивного cte, но он зацикливается навсегда и завершается неудачно после того, как рекурсия достигает 100 уровней.
Проблема, с которой я столкнулся - это 27 матчей с 26, 28 матчей с 27 и 27 с 28. против 28 с 27 ... (навсегда)
Вот запрос, который я написал:
with recurcte as
(
select num as one,num as two from actual
union all
select opt.num as one,cte.two as two
from recurcte cte join optional opt
on opt.num+1=cte.one or opt.num-1=cte.one
)select * from recurcte