我有这张桌子
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。当我玩数百万条记录时,它非常慢。有没有办法用查询来做到这一点?
谢谢。
答案 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
答案 1 :(得分:0)
Oracle有两个非常有用的功能,LEAST和GREATEST:
select distinct least(no1, no2), greatest(no1, no2)
from t