2017-01-06 57 views
0

如何從下表中選擇兩個數字的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

確定。你已經嘗試和/或研究過什麼? –

+0

應該發生的tabid'什麼5'因爲它有三個entires –

+0

我已經編輯結果表..忘了,5有三個條目 – user7384730

回答

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 
+0

。 .. –

+0

Yep OP編輯.......... –

+1

謝謝,這就是我一直在尋找的! – user7384730

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