У меня есть следующие таблицы:
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