如何选择下表中两个数字的tabid相等的一对(数字,数字)(即:数字7和11具有相同的tabid):
tabid | number
---------+--------
1 | 6
1 | 6
2 | 7
3 | 8
4 | 8
5 | 10
5 | 11
6 | 12
6 | 11
5 | 6
4 | 7
3 | 8
2 | 11
结果应该是:
number | number
---------+--------
7 | 11
7 | 8
10 | 11
11 | 12
6 | 10
6 | 11
答案 0 :(得分:2)
这就是你要找的东西:
select
t1.number, t2.number
from t t1, t t2
where t1.tabid = t2.tabid
and t1.number < t2.number;
产生
NUMBER NUMBER
---------- ----------
6 10
6 11
7 8
7 11
10 11
11 12
答案 1 :(得分:0)
使用array_agg
将tabid连接成一个数组。此后,我自己加入此cte以使用数组运算符&&
检查一个数组是否与另一个数组重叠。
with concatenated as (
select array_agg(tabid) as arr_tab, num
from t
group by num
)
select c1.num,c2.num
from concatenated c1
join concatenated c2 on c1.num < c2.num
where c2.arr_tab && c1.arr_tab
order by 1,2