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;
^^^