SQL独特的两列组合

时间:2013-05-01 06:42:00

标签: sql oracle

嗨,我对此问题感到困惑,因为我需要同一列的两个实例的唯一组合。

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

示例数据:

Name
-------
Mouse
Cat
Dog

我想要的结果是:

Name1   Name2
-----   -----
Mouse   Cat
Mouse   Dog
Cat     Dog

我写了以下查询:

SELECT DISTINCT A1.name AS Name1, A2.name as Name2
FROM Animal A1, Animal A2
WHERE A1.name <> A2.name;

取而代之的是以下结果:

Name1  Name2
-----  -----
Mouse  Cat
Mouse  Dog
Cat    Mouse
Cat    Dog
Dog    Mouse
Dog    Cat

我希望我有意义。我不想要两个组合的副本,无论它出现在左侧还是右侧。就“不同”而言,行是截然不同的。那么有什么方法可以消除双重上升吗?

1 个答案:

答案 0 :(得分:7)

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

WHERE A1.name < A2.name;
             ^^^