设为首页 加入收藏

TOP

用EXCEPT对比两个表的数据用还是UNION
2014-11-24 01:03:13 来源: 作者: 【 】 浏览:11
Tags:EXCEPT 对比 两个 数据 还是 UNION

问题描述:

今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行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会把自己表里面的重复数据也除掉。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据库与事务的管理 下一篇利用存储过程把两个表的数据插入..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: