Дубли при выполнении connect by level

Подскажите пожалуйста как можно изменить запрос, чтобы в конечном итоге level не дублировал строки, то есть после выполнения было 8 строк , а не 30. Можно , к примеру прописать distinct, но на больших данных запрос очень долго отрабатывает.

with cte as 
(select 1 as first_ticket_barcode
from dual

union all

select 5 as first_ticket_barcode
from dual
)

select first_ticket_barcode + level -1
from cte
connect by level <= 4

Ответы (1 шт):

Автор решения: Mike

connect by переклеивает все строки в выборке между собой по условию в connect by, а так как там нет условия объединения, то все строки перемножаются между собой. Что бы этого не происходило надо сделать отдельный генератор нужных значений и его результат переклеить с входными данными:

with cte as (
    select 1 as first_ticket_barcode from dual
    union all
    select 5 as first_ticket_barcode from dual
)
select first_ticket_barcode + lev - 1
from cte,
     (select level lev from DUAL connect by level <= 4) gen
→ Ссылка