Postgres表:无论顺序如何,都可以在两列中查找重复项

Lau*_*gou 3 sql postgresql aggregate-functions duplicates

我有一个PostgreSQL表描述两点之间的线.它包含两列,A和B,表示点的id的整数(在另一个表中描述).

但是每一行都在表中重复,因为从A到B的行与从B到A的行相同.

我想删除重复项,但我找不到在两列上工作的聚合函数,重新组合AB和BA行然后删除一列.

谢谢 :)

a_h*_*ame 7

识别重复项:

select least(a,b), greatest(a,b), count(*)
from the_table
group by least(a,b), greatest(a,b)
having count(*) > 1
Run Code Online (Sandbox Code Playgroud)

我认为你应该能够使用以下方法删除其中一对:

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);
Run Code Online (Sandbox Code Playgroud)

(未经测试!)