SQL删除重复组合

时间:2017-08-23 12:47:01

标签: sql

如果我是一张桌子:

  X1     X2 
  1       2 
  2       1
  3       2 

我想删除重复的对,无论它们是在X1还是X2中,都要返回

  X1     X2 
  1       2 
  3       2 

  X1     X2 
  2       1
  3       2 

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:0)

虽然不是SQL标准的一部分(sql标记引用的标准),但大多数DBMS都支持greatest()least()函数:

select distinct least(x1, x2) as x1, greatest(x1,x2) as x2
from the_table;

答案 1 :(得分:0)

如果您有其他列,并且这些对只出现一次(在任一方向上):

select t.*
from t
where t.x1 <= t.x2
union all
select t.*
from t
where t.x1 > t.x2 and
      not exists (select 1 from t t2 where t2.x1 = t.x2 and t2.x2 = t.x1);

答案 2 :(得分:0)

始终先选择最小值。执行UNION删除重复项。

select x, y from table where x <= y
union
select y, x from table where x > y