选择其他列的值相等的对

时间:2017-01-06 16:32:57

标签: sql postgresql

如何选择下表中两个数字的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

2 个答案:

答案 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

Sample Demo