选择列的唯一组合

时间:2019-02-02 04:23:21

标签: sql oracle

说我有一个名为TEST的表,其中有两个列F1和F2,它们都是整数。 说测试看起来像这样:

F1|F2
-----
 1|2
 2|1
 1|3
 4|1

基本上,我想返回如下结果:

F1|F2
-----
 1|2
 1|3
 4|1

我很难提出一条选择语句,如果(a,b)已经存在,它将忽略(b,a)行,并且仍然选择不存在反向的所有行。

1 个答案:

答案 0 :(得分:3)

您可以使用EXISTS检查表中是否存在具有相同值但顺序不同的条目。我们还添加了F2值大于F1值的条件,因此我们不会同时排除(1,2)(2,1),而我们使用{{1} },因此我们不会获得DISTINCT = F1(例如F2)的多个条目。

(2,2)

输出:

SELECT DISTINCT F1, F2
FROM test t1
WHERE NOT EXISTS (SELECT F1, F2 
                  FROM test t2
                  WHERE t2.F1 = t1.F2 AND t2.F2 = t1.F1 AND t2.F2 > t2.F1)
ORDER BY F1, F2

Demo on SQLFIddle