一、场景复现
不知道大家在日常工作过程中有没有遇到这样的问题,别人发你一个1.1版本的Excel数据表格,然后你自己电脑上保留的事1.0版本的,那这个两个版本不一致,再加上Excel又没有溯源的机制。那么,你应该如何定位到1.0版本与1.1版本的数据表格之间做了哪些改动呢?
前提:这里的改动是只针对数据进行的改动,表头也就是字段是没有发生改动的
二、分析与解决
遇到这种场景问题,也许你会很熟练的进行各种VLOOKUP进行分析,亦或者说是直接去问1.1版本的作者他改动了啥,当然这其中又是免不了一番拉扯,那么有没有一种快速而又简洁且不需要求人的方法呢?答案当然是有的。如果你会使用数据库的话,那我直接可以使用SQL语句来进行关联查询即可。
解决过程如下:
第一步
首先,先安装一个MySQL的数据库,这里怎么安装的我就不再赘述了,可以看我之前发表的文章
第二步
安装完成之后,将Excel数据表格导入到MySQL中,这里我首先准备了一个V1.0版本的数据
然后我对第一行的数据在后面增加了一个128G
然后分别将两个版本的数据集导入到MySQL,形成两个表
第三步:编写SQL直接查询出结果
-- 在t1表中有,t2表中没有的数据
SELECT * FROM test.`order_v1.0` t1
WHERE NOT EXISTS (
SELECT 1 FROM test.`order_v2.0` t2
WHERE
t1.`行 ID` = t2.`行 ID`AND
t1.`订单 ID` = t2.`订单 ID`AND
t1.`订单日期` = t2.`订单日期`AND
t1.`发货日期` = t2.`发货日期`AND
t1.`邮寄方式` = t2.`邮寄方式`AND
t1.`客户 ID` = t2.`客户 ID`AND
t1.`客户名称` = t2.`客户名称`AND
t1.`细分` = t2.`细分`AND
t1.`城市` = t2.`城市`AND
t1.`省/自治区` = t2.`省/自治区`AND
t1.`国家/地区` = t2.`国家/地区`AND
t1.`地区` = t2.`地区`AND
t1.`产品 ID` = t2.`产品 ID`AND
t1.`类别` = t2.`类别`AND
t1.`子类别` = t2.`子类别`AND
t1.`产品名称` = t2.`产品名称`AND
t1.`销售额` = t2.`销售额`AND
t1.`数量` = t2.`数量`AND
t1.`折扣` = t2.`折扣`AND
t1.`利润` = t2.`利润`
)
UNION ALL
-- 在t2表中有,t1表中没有的数据
SELECT * FROM test.`order_v2.0` t2
WHERE NOT EXISTS (
SELECT 1 FROM test.`order_v1.0` t1
WHERE
t1.`行 ID` = t2.`行 ID`AND
t1.`订单 ID` = t2.`订单 ID`AND
t1.`订单日期` = t2.`订单日期`AND
t1.`发货日期` = t2.`发货日期`AND
t1.`邮寄方式` = t2.`邮寄方式`AND
t1.`客户 ID` = t2.`客户 ID`AND
t1.`客户名称` = t2.`客户名称`AND
t1.`细分` = t2.`细分`AND
t1.`城市` = t2.`城市`AND
t1.`省/自治区` = t2.`省/自治区`AND
t1.`国家/地区` = t2.`国家/地区`AND
t1.`地区` = t2.`地区`AND
t1.`产品 ID` = t2.`产品 ID`AND
t1.`类别` = t2.`类别`AND
t1.`子类别` = t2.`子类别`AND
t1.`产品名称` = t2.`产品名称`AND
t1.`销售额` = t2.`销售额`AND
t1.`数量` = t2.`数量`AND
t1.`折扣` = t2.`折扣`AND
t1.`利润` = t2.`利润`
)
很容易我们就能筛选并定位到发生改变的具体位置,还是很方便的。# 如何使用SQL快速筛选出两张表中不一致的数据?