说我有一个名为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)行,并且仍然选择不存在反向的所有行。
答案 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