如何从共享不同ID号的多行中获得所有不同的组合?

时间:2019-03-15 17:04:00

标签: sql oracle

我大约有150个名字,它们由16万个不同的ID编号链接在一起。我想获得这些名称的独特组合。例如,John和Kate这两个名字可以通过不同的ID链接数千次,但是我只想知道John和Kate是一个链接对。在某些情况下,有两个以上的名称链接。例如,这是我的表格当前的样子:

ID| Name|  
 1| Mike|
 1|John |
 2|Kate |
 2|John |
 3|Frank|
 3|Ted  |
 3|Blue |
 4|John |
 4|Mike |
 5|John |
 5|Kate |
 6|John |
 6|Kate |

在这种情况下,我们根据各种ID进行组合。我们也有多余的组合;例如id1和4,以及2、5、6。我希望输出只是给我不同的组合,而不管它们在表中出现的顺序如何。输出如下:

Name1| Name2 |Name3
Mike | John  |
Kate | John  |
Frank| Ted   | Blue

4将被省略,因为它的第一行; 5、6将被省略,因为它被第二行覆盖了。

1 个答案:

答案 0 :(得分:0)

对于链接的,您将使用自联接:

select distinct t1.name, t2.name
from t t1 join
     t t2
     on t1.id = t2.id and t1.name < t2.name;

我不清楚这是否可以解决您的整个问题。