如果我是一张桌子:
X1 X2
1 2
2 1
3 2
我想删除重复的对,无论它们是在X1还是X2中,都要返回
X1 X2
1 2
3 2
或
X1 X2
2 1
3 2
有办法做到这一点吗?
答案 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