如何在 postgreSQL 中检查重复行 (a,b) ~ (b,a)

How to check for duplicate rows (a,b) ~ (b,a) in postgreSQL

假设我有两个表(ids1、ids2,列分别为 headers id1、id2)

+-----+----+  
| id1 | id2|  
+-----+----+  
| 1 | 3  |  
| 2 | 4  |  
| 3 | 1  |  
| 4 | 2  |   
| 5 | 0  |   
+--------+  

如何删除 (a,b) ~ (b,a) 行以便获得

+-----+----+  
| id1 | id2|  
+-----+----+  
| 1 | 3  |  
| 2 | 4  |  
| 5 | 0  |    
-----------+ 

无论我得到 (1,3) (2,4)、(3,1) (4,2) 还是两者的组合都没有关系。

我正在使用 postgreSQL-9.2。

SELECT LEAST(id1,id2),GREATEST(id1,id2) FROM t
GROUP by
GREATEST(id1,id2),LEAST(id1,id2)

FIDDLE

这可能不是最优雅的解决方案,但它会起作用:

DELETE FROM foo
WHERE (id1, id2) in (
SELECT f1.id1, f1.id2
    FROM foo f1
    JOIN foo f2 ON (
        f1.id1 = f2.id2 AND
        f1.id2 = f2.id1 AND
        (f1.id1, f1.id2) > (f2.id1, f2.id2))
);

联接中的大于条件确保不会删除两个匹配的行。