主题:如何用表B中的记录去置换表A中符合条件的记录?
ihorse
[专家分:970] 发布于 2008-11-13 21:00:00
现有两个表A和B,其中A中的记录数量比B中的多得多,两个表的字段完全相同。
现在想实现:
将表B中的第一条记录取出来,与表A的所有记录相对照(遍历查找),如果发现有某项字段值与表B中的该记录的值相同或相差不大(该字段为数值型),便将查找到的A中的该记录用B中的该记录去置换(即将A中的符合条件的放到另一个表C中,然后将B中的该记录放到A中),并将表B中的该条记录删除,以便让表B中的下一条记录置于第一位,其记录号自动变更为1,再次重复以上过程,逐一将B中的记录置换到表A中,将A中满足条件的记录全取出保存到表C中……如上操作,直到表B的所有记录都被置换到A中。
请问,以上过程如何用代码实现?请各位老师赐教,深表感谢!
回复列表 (共1个回复)
沙发
qiuguohua_sh [专家分:20] 发布于 2008-11-20 09:52:00
一、不知道该题有何实际意义和背景。虽然可以“就事论事”地写代码,但毕竟代码为解决问题,因此而受问题意义的影响。以下是在不明确意义、背景下的讨论。
二、理解该题:字段完全相同的A、B两表,要将B的记录置换A。置换条件是依据某字段的值,如果相等就置换,不相等则置换“相差不大”或相差最小者。原题中“遍历查找”、“放到另一个表”等可另行考虑和实现。
三、还不清楚的地方:B是否有重复值?假设没有;A是否有重复值?有是否都要置换,还是只置换一个?假设没有;什么是“相差不大”?B的每个值是否一定都要置换?按相等还是“相差不大”置换,差别很大。
四、按A、B表都没有重复值或不考虑重复,相应数值型字段名为X,那么代码如下,只是在B上做dele标记(实际表名不宜取A、B):
set near on &&实现“相差不大”。不然(set near off)则只处理等于情况
clos data
use A
inde on X to tmp
sele 0
use B
scan
sele A
seek B.X
dele
endscan
我来回复