我有一个PostgreSQL表来描述两点之间的直线。它包含两列,A和B,表示点的id的整数(在另一个表中描述)。
但是表中的每一行都是重复的,因为从A到B的行与从B到A的行是相同的。
我想删除重复项,但找不到处理两列的聚合函数,要重新组合AB和BA行,然后删除一列。
谢谢:)

最佳答案

识别重复项:

select least(a,b), greatest(a,b), count(*)
from the_table
group by least(a,b), greatest(a,b)
having count(*) > 1

我认为您应该可以使用以下方法删除其中一对:
delete from the_table
where (least(a,b), greatest(a,b)) in (
                select least(a,b), greatest(a,b)
                from the_table
                group by least(a,b), greatest(a,b)
                having count(*) > 1);

(未测试!)

10-08 06:57