如何排除对称记录

时间:2016-05-14 15:40:41

标签: sql postgresql select

令T为具有样本数据的表T(field1,field2)

(1, 2) // first part
(3, 4)
(5, 6)
....
(2, 1) // second part
(4, 3)
(6, 5)

如何排除second.field2 = first.field1 and second.field1 = first.field2的第二部分记录?

2 个答案:

答案 0 :(得分:1)

您可以使用leastgreatest对这两个字段进行排序,并使用distinct运算符删除重复字段:

SELECT DISTINCT LEAST(field1, field2), GREATEST(field1, field2)
FROM   t

答案 1 :(得分:0)

SELECT *
FROM ztable t
WHERE field1 <= field2
OR NOT EXISTS (
    SELECT * FROM ztable x
    WHERE x.field1 = t.field2 AND x.field2 = t.field1
    );

如果两个版本都存在,则仅提供(f1&lt; = f2)记录,如果只存在一个版本,则仅提供实际记录。