Chinaunix

标题: 相反数据的抽出问题 [打印本页]

作者: jasyjacy    时间: 2010-07-09 21:54
标题: 相反数据的抽出问题
字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8
A,01,02,11,12,34,56,46,68
B,02,01,12,11,56,34,68,46
A和B分别是同一个表的一对数据,字段1和字段2是反过来的,其他字段也是,问怎么实现表里多对数据的抽出
只要是同一对反数据,只抽出其中的一条就行,如A,B是一对,C,D是一对
A,B,C,D的主KEY都 不一样, 要抽出A,C或B,D都行,怎么实现呢
求大大解答
不胜感激
作者: 云杉上的蝴蝶    时间: 2010-07-10 20:54
可以通过对ROWID 的比较来实行,oracle 数据库每一条记录都有一个ROWID
其他数据库我没用过不知道,可以自己建一个自动序列号自动来模拟ROWID
假设表明为test
A    B    C    D
01 02   ?     ?
02 01   ?     ?
11 12   ?     ?
12 11   ?     ?
34 56   ?     ?
56 34   ?     ?
46 68   ?     ?
68 46   ?     ?
测试表只有8条数据
用以下PLSQL 语句:
select t.a,t.b
from test t
where t.a||t.b not in
( select v.b||v.a
from test v
where t.rowid < v.rowid )

返回的结果只有4条数据
A   B
2   1
12 11
56 34
68 46
如果判断 t.rowid > v.rowid
则返回如下四条数据
A   B
1  2
11 12
34 56
46 68

不知道这个是不是符合你的要求
作者: 云杉上的蝴蝶    时间: 2010-07-10 20:56
|| 是字符串连接运算符
作者: jasyjacy    时间: 2010-07-11 18:01
就是我想要的,谢谢
你太聪明了{:6_689:}
作者: 春式美丽    时间: 2010-07-12 08:53
只有符号不同的两个数,我们就说其中一个是另一个的相反数,但0的相反数是0。一般地,任意的一个有理数a,它的相反数是-a。a本身既可以是正数,也可以是负数,还可以是零。(具体取法:正数的相反数是数前加负号,负数的相反数是将原数的负号去掉,0的相反数是0)互为相反数的两个数在数轴上表示出来后,表示这两个数的点,分别在原点的两旁,与原点的距离相等,并且互为相反数的两个数




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2