Сегодня увидел довольно занимательный пример рекурсии на DB2. В примере выполняется поиск корневого значения, а примечательным является простота и наглядность примера - дополнительных таблиц создавать не требуется.
with
tree (id,pid) as (
values (1,2), (2,3), (3,4), (4, cast(null as int)), (5,3), (6,5), (7,8), (8, cast(null as int))
),
rr (id,pid) as (
select tr.id, tr.pid from tree tr where tr.id=1
union all
select tt.id,tt.pid from tree tt, rr
where tt.id = rr.pid
)
select id from rr where rr.pid is null
Поиск "корня" выполняется для значения указанного в tr.id. Для проверки tr.id=1 можно например заменить на tr.id=7.
Источник: db2 SQL: value(), values(), with, recursive SQL // selectorweb.com.