sql2000利用查询命令进行数据比对

来源:互联网 发布:淘宝开店认证认证不了 编辑:程序博客网 时间:2024/04/30 06:50

         日常工作中,我们经常把一份电子表格的内容(尤其是数据)录入到电脑系统中,但很多时候录入完成后发现录入的结果有错误,与电子表格的内容(例如:统计求和)有出入,但数据量又太大,如何快速找出哪些人员录错了呢,也就是说如何高效的进行数据比对呢。以下图中我们假设姓名(xm,xm01)字段的值是唯一的,我们要根据姓名找出金额(je,je01)不一致的记录。

以上图中,如何前两列是原始的电子表格内容,后两列是我们录入系统后的内容,我们发现有两条记录对应的je和je01的值是不一致的,对应的xm是“岳恒勇”,“崔世泉”。

(一)查询:

方法(一):

select * from bd where xm=xm01 and je<>je01

我们可以看出,这样查找出来的记录是不完全的,只把同一行名字相同的记录找了出来,而xm为岳恒勇的名字出现在不同的行上,所以这条记录没有查找出来,接下来怎么完善查询呢?

小结:此命令只针对xm排好序了,对应一致在同一行上,显然上述表中的xm和xm01对应的顺序是不一致的,所以查询的结果是不正确的

方法(二):

select * from (select xm,je from bd) a , (select xm01,je01 from bd) b where a.xm = b.xm01 and a.je <> b.je01

运行结果如下:


我们可以看见,只要是je和je01不一致的记录都找了出来,不管姓名是不是在同一行上

(二):更新

假如我们想把je和je01不一致的记录的 flag 置为1,用如下命令

update bdset flag =1where xm in(            select xm from (select xm,je,flag from bd) a , (select xm01,je01 from bd) b where a.xm = b.xm01 and a.je <> b.je01           )


 

如果xm和xm01的顺序一致也可以用如下更新命令:

update bdset flag = 1where xm+xm01 in(                 select xm+xm01 from (select xm,je from bd) a , (select xm01,je01 from bd) b where a.xm = b.xm01 and a.je <> b.je01                )


 

0 0