用EXCEPT对比两个表的数据用还是UNION
来源:互联网 发布:极速赛车全天计划数据 编辑:程序博客网 时间:2024/06/10 11:39
问题描述:
今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行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
GOSELECT
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会把自己表里面的重复数据也除掉。
- 用EXCEPT对比两个表的数据用还是UNION
- 查询两个表的数据 union
- 获取两个DataTable之间的差集、交集、并集集合(Except、Intersect、Union)
- 获取两个DataTable之间的差集、交集、并集集合(Except、Intersect、Union)
- SQLSERVER数据集合的交、并、差集运算(intersect,union,except)
- SQLSERVER数据集合的交、并、差集运算(intersect,union,except)
- SQL中Union,Intersect,Except的区别
- 对比a,b两个表相同字段 数据的差异
- 两个Oracle数据库之间表数据的对比
- 两张结构一样的表如何找不同的记录:UNION - UNION ALL - INTERSECT - MINUS / EXCEPT
- mySql联合两个查询结果用UNION或者UNION ALL
- 用python实现两个文件中的数据对比
- union来合并两个表的列
- 用openpyxl对比两个表格的数据,并把表格A 和表格B相同的数据填写到表格B
- UNION, INTERSECT, EXCEPT
- UNION, INTERSECT, EXCEPT
- 关于SQL2000的交并差(Intersect、Union、Except)命令说明
- 更好的办法:用union判断系统中的CPU 是Little endian 还是Big endian 模式
- ------字符串比较-----
- crc校验
- Watson能否助IBM走出困境?
- 工作中用到的Git命令整理
- .pyc 和.pyo
- 用EXCEPT对比两个表的数据用还是UNION
- 【C++】PAT(advanced level)1073. Scientific Notation (20)
- dede 搜索没结果要显示固定格式
- 对html或jsp文章列表页面进行js分页,结合使用apache的url Rewrite和jquery
- Android发光特效焦点框-遥控器版本
- [c++学习] dowhile 输入两个string ,判断较大的.---ShinePans
- Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
- 递归merge排序
- 依靠大数据让居民拥抱绿色能源,Opower启动IPO欲融资1亿美元