Все вариации от урожая (оракул) - PullRequest
0 голосов
/ 21 октября 2019

Я хотел бы генерировать все возможные варианты без повторения. Я подготовил набор данных и запрос, и ожидаемый результат

with t as (
  select 'A' as col1 from dual
  union all
  select 'B' as col1 from dual
  union all
  select 'C' as col1 from dual
)
select * from t

или

 with t as (
      select 'A' as col1, 'B' as col2, 'C' as col3 from dual
    )
    select * from t

Что я хочу получить?:

A;
A;B
A;B;C
A;C
B;
B;C
C;

порядок строк не имеет значения, элементы не имеют порядка, поэтому они не могут быть: A; B и B; A

Работает, но возвращает дублирующиеся варианты:

select sys_connect_by_path( col1, ';' )
from t
connect by nocycle col1 <> prior col1

1 Ответ

2 голосов
/ 21 октября 2019

Вы можете использовать код ниже:

with t as (
  select 'A' as col1 from dual
  union all
  select 'B' as col1 from dual
  union all
  select 'C' as col1 from dual
) 
select substr(sys_connect_by_path( col1, ';' ),2)
from t
connect by nocycle col1 < prior col1;
...