创建了一个测试表v,里面有test1和test2两列,现要求出两列数据是彼此互换的行。
SQL> select * from v;
TEST1 TEST2
---------- ----------
20 20
10 20
20 10
30 50
50 30
60 70
70 80
20 20
SQL> select distinct v1.*
2 from v v1,v v2
3 where v1.test1=v2.test2
4 and v1.test2=v2.test1
5 and v1.test1<=v1.test2;
TEST1 TEST2
---------- ----------
10 20
30 50
20 20
其中distinct的作用是为了除去重复行,我们把它取掉再看看结果有何变化
SQL> select v1.*
2 from v v1,v v2
3 where v1.test1=v2.test2
4 and v1.test2=v2.test1
5 and v1.test1<=v1.test2;
TEST1 TEST2
---------- ----------
20 20
20 20
10 20
30 50
20 20
20 20
最后一个where条件v1.test1<=v1.test2的作用是确保只返回一对互换数,比如说有30 50,和50 30两条记录,那么这里只返回30 50这条记录。取掉它看看结果就明白了。
SQL> select distinct v1.*
2 from v v1,v v2
3 where v1.test1=v2.test2
4 and v1.test2=v2.test1;
TEST1 TEST2
---------- ----------
10 20
50 30
30 50
20 20
20 10