从sql表中删除无序重复项

时间:2018-08-22 15:53:35

标签: mysql sql

我有一张像下面的桌子。

id1 id2
1   2
1   3
2   1
1   3

我想从此表中删除重复项,其中两个属性的值互换的行也被视为重复项。

结果应该看起来像其中之一。 (行顺序当然是无关紧要的。)

id1 id2
1   2
1   3

id1 id2
1   3
2   1

我找不到办法。有人可以帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

这是您想要的吗?

SELECT DISTINCT 
       GREATEST(ColumnA, ColumnB) AS Col1,
       LEAST(ColumnA, ColumnB) AS COl2
  FROM Your_Table

答案 1 :(得分:2)

使用union all的一种方法。

select distinct id1,id2
from tbl 
where id1 <= id2
union all
select distinct id1,id2
from tbl t1
where id1 > id2
and not exists (select 1 from tbl t2 where t1.id1=t2.id2 and t1.id2=t2.id1)

对于MySQL版本8和更高版本,您可以简化此解决方案以将row_numberleastgreatest结合使用。

select id1,id2
from (select id1,id2
      ,row_number() over(partition by least(id1,id2),greatest(id1,id2) 
                         order by id1) as rnum
      from tbl
     ) t
where rnum=1