|
with recursive n as (select i-1 n from generate_series(1,8)t(i))
,b as (select 1<<(i-1) b from generate_series(1,3)t(i))
,p as(select n1.n n1,n2.n n2
,count(*) cnt
from n n1, n n2, b
where n1.n<n2.n
and xor(n1.n,n2.n)&b.b>0
group by n1.n ,n2.n
having count(*)>=2)
,t as(select 1 lv,[n1,n2]a from p
union all
select lv+1,a+[n] from t,n where (a[-1],n) in( select (n1,n2) from p q)and(a[-2],n) in( select (n1,n2) from p q)
)
select lv,a from t order by lv;
┌───────┬──────────────┐
│ lv │ a │
│ int32 │ int64[] │
├───────┼──────────────┤
│ 1 │ [1, 2] │
│ 1 │ [0, 3] │
│ 1 │ [1, 4] │
│ 1 │ [3, 4] │
│ 1 │ [0, 5] │
│ 1 │ [2, 5] │
│ 1 │ [1, 6] │
│ 1 │ [3, 6] │
│ 1 │ [5, 6] │
│ 1 │ [0, 7] │
│ 1 │ [2, 7] │
│ 1 │ [4, 7] │
│ 1 │ [2, 4] │
│ 1 │ [3, 5] │
│ 1 │ [0, 6] │
│ 1 │ [1, 7] │
│ 2 │ [1, 2, 4] │
│ 2 │ [0, 3, 5] │
│ 2 │ [0, 3, 6] │
│ 2 │ [0, 5, 6] │
│ 2 │ [3, 5, 6] │
│ 2 │ [1, 2, 7] │
│ 2 │ [1, 4, 7] │
│ 2 │ [2, 4, 7] │
│ 3 │ [0, 3, 5, 6] │
│ 3 │ [1, 2, 4, 7] │
├───────┴──────────────┤
│ 26 rows (20 shown) │
└──────────────────────┘ |
|