假设我有两个表(ids1,ids2,列标题分别为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。
答案 0 :(得分:1)
SELECT LEAST(id1,id2),GREATEST(id1,id2) FROM t
GROUP by
GREATEST(id1,id2),LEAST(id1,id2)
答案 1 :(得分:0)
这可能不是最优雅的解决方案,但它会起作用:
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))
);
连接中的grater than条件确保不会删除两个匹配的行。