如何消除表中两列的重复

时间:2012-09-05 19:21:17

标签: sql duplicates row

我有这张桌子

CREATE TABLE T
(No1 INT,
 No2 INT
)

INSERT INTO T (No1, No2) VALUES (1, 2)

INSERT INTO T (No1, No2) VALUES (2, 1)

INSERT INTO T (No1, No2) VALUES (3, 4)

INSERT INTO T (No1, No2) VALUES (4, 3)

INSERT INTO T (No1, No2) VALUES (5, 6)

INSERT INTO T (No1, No2) VALUES (6, 5)

INSERT INTO T (No1, No2) VALUES (1, 6)

INSERT INTO T (No1, No2) VALUES (6, 1)

    No1 No2
    1   2 
    2   1
    3   4
    4   3
    5   6
    6   5
    1   6
    6   1

我想要的是消除具有相同值但在另一个字段中的行。对我来说No1 = 1 No2 = 2而No1 = 2 No2 = 1是一回事。最后,我希望这是结果。

No1 No2
1   2
3   4
5   6
1   6

我尝试了很多东西而且我做了很多搜索,但我一无所获。我找到的唯一方法是使用Cursor。当我玩数百万条记录时,它非常慢。有没有办法用查询来做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:2)

select t1.*
from MyTable t1
left outer join MyTable t2 on t1.No1 = t2.No2 and t1.No2 = t2.No1
where t2.No2 is null
    or t1.No1 <= t2.No1

SQL Fiddle Example

答案 1 :(得分:0)

Oracle有两个非常有用的功能,LEAST和GREATEST:

select distinct least(no1, no2), greatest(no1, no2)
from t