【问题标题】:Pairs with no duplicates grouped together没有重复的对组合在一起
【发布时间】:2018-02-10 20:21:04
【问题描述】:

我有一张桌子

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 已经使用递归函数来完成排列。

【问题讨论】:

  • 好的,所以列 NAME 不起作用,对吗?
  • 更正它在那里,所以如果有任何讨论,我可以称它为“a”、“b”、“c”。

标签: sql oracle select plsql


【解决方案1】:

你可以自己加入表格:

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;

【讨论】:

  • 差不多了,但是 - 虽然 OP 没有明确说明 - 看起来 pairid 是根据“ORDER BY first, second”分配的。所以ROW_NUMBER() 似乎是必要的。
猜你喜欢
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多