SQL是两列的唯一组合

SQL是两列的唯一组合,sql,oracle,Sql,Oracle,嗨,我被这个问题难住了,因为我需要同一列的两个实例的唯一组合 假设我有一个列名为的桌上动物。我想要动物名称的所有“独特”组合,而不是重复它自己或其他已经存在的行 样本数据: Name ------- Mouse Cat Dog 我想要的结果是: Name1 Name2 ----- ----- Mouse Cat Mouse Dog Cat Dog 我编写了以下查询: SELECT DISTINCT A1.name AS Name1, A2.name as Name2

嗨,我被这个问题难住了,因为我需要同一列的两个实例的唯一组合

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

样本数据:

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;

我希望我说的有道理。我不想要两个组合的副本,不管它出现在左边还是右边。就“不同”而言,行是不同的。那么有什么方法可以消除双重效应吗?

要找到独特的组合,只需将
更改为
哇,就这么简单?为了学习目的。。。你能解释一下在这种情况下,<在做什么吗?我不明白为什么小于号在这种情况下会如此有用。假设有两行,
Mouse Cat
Cat Mouse
。该条件将过滤掉第一行,因为在alfabet中,
Mouse
位于
Cat
之后。很好的解释!我会把这个问题解决。感谢您的快速响应。使用隐式连接被认为是糟糕的编码风格。在您的情况下,您确实需要笛卡尔积,但最好使用来自动物A1的
交叉连接动物A2
Name1  Name2
-----  -----
Mouse  Cat
Mouse  Dog
Cat    Mouse
Cat    Dog
Dog    Mouse
Dog    Cat
WHERE A1.name < A2.name;
             ^^^