2017-01-06 16 views
0

tabidが次の表の2つの数値と等しい場合(つまり、番号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

OK。あなたはすでに何か試してみましたか? –

+0

3つのエントリーがあるのでタブID「5」にはどうなるのですか –

+0

結果テーブルを編集しました。5が3つのエントリを持っているのを忘れています – 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を配列に連結します。その後、配列演算子&&を使用して、この配列を自己結合して、一方の配列が他方の配列と重複しているかどうかを確認します。

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

関連する問題