используйте рекурсивные общие табличные выражения, чтобы найти последовательный номер. s из двух таблиц

У меня есть следующие таблицы:

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
7
задан Aaron Bertrand 9 September 2011 в 14:48
поделиться