没有重复的对组合在一起

时间:2017-09-01 18:08:07

标签: sql oracle select plsql

我有一张桌子

ID  GROUPID  NAME
==  =======  ========
 1      100  A
 2      100  B
 3      200  C
 4      200  D
 5      300  E
 6      100  F

我想创建一个包含组内排列对的表,其中第一个和第二个上没有任何对,看起来像这样:

 PAIRID  FIRST  SECOND
 ======  =====  ======
      1      1       2
      2      1       6
      3      2       1
      4      2       6
      5      3       4
      6      4       3
      7      6       1
      8      6       2

如果可能,我想在PL / SQL或直接SQL插入中执行此操作。我这样做through Java已经使用递归函数来完成排列。

1 个答案:

答案 0 :(得分:2)

你可以自己加入桌子:

SELECT   ROW_NUMBER() OVER (ORDER BY a.id, b.id) AS pairid, 
         a.id AS FIRST, b.id AS second
FROM     mytable a
JOIN     mytable b ON a.groupid = b.groupid AND a.id <> b.id
ORDER BY 1 ASC;