Сегодня увидел довольно занимательный пример рекурсии на 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.