2

我有这张桌子

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

我尝试了很多东西,我做了很多搜索,但我什么也没找到。我发现的唯一方法是使用光标。当我玩数百万条记录时,它非常慢。有没有办法通过查询来做到这一点?

谢谢你。

4

2 回答 2

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 小提琴示例

于 2012-09-05T19:31:58.373 回答
0

Oracle 有两个非常有用的函数,LEAST 和 GREATEST:

select distinct least(no1, no2), greatest(no1, no2)
from t
于 2012-09-05T19:32:04.977 回答