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 という 2 つの非常に便利な関数があります。

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