SQL独特的两列组合

cha*_*ser 3 sql oracle

嗨,我很难解决这个问题,因为我需要同一列的两个实例的独特组合.

假设我有一个名为Animal的表动物.我想要动物名称的所有"独特"组合,而不是重复它自己或另一个已经存在的行.

样本数据:

Name
-------
Mouse
Cat
Dog
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

Name1   Name2
-----   -----
Mouse   Cat
Mouse   Dog
Cat     Dog
Run Code Online (Sandbox Code Playgroud)

我写了以下查询:

SELECT DISTINCT A1.name AS Name1, A2.name as Name2
FROM Animal A1, Animal A2
WHERE A1.name <> A2.name;
Run Code Online (Sandbox Code Playgroud)

这让我获得了以下结果:

Name1  Name2
-----  -----
Mouse  Cat
Mouse  Dog
Cat    Mouse
Cat    Dog
Dog    Mouse
Dog    Cat
Run Code Online (Sandbox Code Playgroud)

我希望我有意义.我不想要两个组合的副本,无论它出现在左侧还是右侧.就"不同"而言,行是截然不同的.那么有什么方法可以消除双倍增长?

And*_*mar 7

要查找唯一组合,只需更改<>为<:

WHERE A1.name < A2.name;
             ^^^
Run Code Online (Sandbox Code Playgroud)