Вариант примера Питера, демонстрирующий способ его использования для генерации всех чисел от 0 до 99.
with digits as (
select mod(rownum,10) as num
from dual
connect by rownum <= 10
)
select a.num*10+b.num as num
from digits a
,digits b
order by num
;
Нечто подобное становится полезным, когда вы делаете присвоение идентификатора партии и ищете элементы, которые еще не были назначены.
Например, если вы продаете билеты в бинго, вы можете назначить партии из 100 человек на этаже (угадайте, как я использовал для сбора средств на спорт). Когда они продают партию, им дается следующая партия в последовательности. Тем не менее, люди, покупающие билеты, могут купить любые билеты из партии. Можно задать вопрос, «какие билеты были проданы».
В этом случае у нас есть только частичный случайный список заявок, которые были возвращены в данной партии, и нам требуется полный список всех возможностей, чтобы определить, какой из них у нас нет.
with range as (
select mod(rownum,100) as num
from dual
connect by rownum <= 100
),
AllPossible as (
select a.num*100+b.num as TicketNum
from batches a
,range b
order by num
)
select TicketNum as TicketsSold
from AllPossible
where AllPossible.Ticket not in (select TicketNum from TicketsReturned)
;
Извините за использование ключевых слов, я изменил некоторые имена переменных из примера из реального мира.
... Чтобы продемонстрировать, почему что-то подобное было бы полезно