Postgresql 当我将记录(A,B)与(B,A)一样处理时,如何删除重复记录

Postgresql 当我将记录(A,B)与(B,A)一样处理时,如何删除重复记录,postgresql,Postgresql,我的表中有列col1,col2(以及其他一些列) 在我的情况下,记录1,2和2,1是相同的,如何使用此重复定义删除此表的重复数据 要仅选择这些行,请使用: select distinct least(col1,col2) as col1, greatest(col1,col2) as col2 from the_table; 要仅选择这些行,请使用: select distinct least(col1,col2) as col1,

我的表中有列
col1
col2
(以及其他一些列)


在我的情况下,记录1,2和2,1是相同的,如何使用此重复定义删除此表的重复数据

要仅选择这些行,请使用:

select distinct 
         least(col1,col2) as col1, 
         greatest(col1,col2) as col2
from the_table;

要仅选择这些行,请使用:

select distinct 
         least(col1,col2) as col1, 
         greatest(col1,col2) as col2
from the_table;

你可以这样做。这也可以扩展到两列以上。只需在concat中添加列,并使用split_part添加更多列

select split_part(split_k,',',1) as col1 ,split_part(split_k,',',2) as col2 from
  (
    select distinct string_agg(split,',' order by split) as split_k from 
      (
      select row_number() over () as row_num,unnest(string_to_array(concat(col1,',',col2),',')) as split from new
      )t 
    group by row_num
  )k

一把小提琴:你可以这样做。这也可以扩展到两列以上。只需在concat中添加列,并使用split_part添加更多列

select split_part(split_k,',',1) as col1 ,split_part(split_k,',',2) as col2 from
  (
    select distinct string_agg(split,',' order by split) as split_k from 
      (
      select row_number() over () as row_num,unnest(string_to_array(concat(col1,',',col2),',')) as split from new
      )t 
    group by row_num
  )k

这是一个难题:

您是要物理删除这些行,还是只删除SELECT语句?如果要
删除它们:该表中是否有唯一的列?只需SELECT语句。是要物理删除这些行,还是只需SELECT语句?如果您想
删除它们:该表中是否有唯一的列?只需选择语句即可。