我有一张像下面的桌子。
id1 id2
1 2
1 3
2 1
1 3
我想从此表中删除重复项,其中两个属性的值互换的行也被视为重复项。
结果应该看起来像其中之一。 (行顺序当然是无关紧要的。)
id1 id2
1 2
1 3
或
id1 id2
1 3
2 1
我找不到办法。有人可以帮我吗?
谢谢。
答案 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_number
与least
和greatest
结合使用。
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