您好,欢迎访问一九零五行业门户网

用EXCEPT对比两个表的数据用还是UNION

问题描述: 今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行ok,新系统在时间上减少了人工干预,提高了80个百分点。先用老系统跑一次数据,导入到一个备份表。再用新系统跑一次,数量和备份表里面的一样。心里坦荡了一
问题描述:
今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行ok,新系统在时间上减少了人工干预,提高了80个百分点。先用老系统跑一次数据,导入到一个备份表。再用新系统跑一次,数量和备份表里面的一样。心里坦荡了一点。再比较里面每一行数据是否一样的时候,先是用了如下方式:
select
count(0)
from
(
select * from table_nm_bac
union
select * from table_nm
) a
表table_nm_bac和表table_nm里面的数据都是1万条,结果上述query出来的结果是9千条。
环境:sql server 2008
解决方法:
因为想到不可能union出来的结果比每个表数量少,所以立马用except的如下方式:
select
column_nm1,
column_nm2
...
from
table_nm
except
select
column_nm1,
column_nm2
...
from
table_nm_bac
go
select
column_nm1,
column_nm2
...
from
table_nm_bac
except
select
column_nm1,
column_nm2
...
from
table_nm
go
这样两个query出来的结果都是空的。我就放心了。后来用下面的query再检查了一遍数据,结论出来了,是因为union把表里面自己的重复数据给除掉了:select count(0) from(
select distinct * from table_nm) a
go
select
count(0)
from
(
select * from table_nm
union
select * from table_nm
)
go
distinct后的数据和union自己后的数据是一样一样的。
结论:比对两个表数据是否一致还是用except方式比较好, 因为两个做union会把自己表里面的重复数据也除掉。
其它类似信息

推荐信息