首页 > 解决方案 > 有没有办法使用 SQL 或 EXCEL 跟踪两个表的更改?

问题描述

我有一个问题,我希望这里有人可以帮助我。我有 2 个表(旧表和新表),它们的数据非常相似(列数和行数相等),但在某些值上有一些差异。我想跟踪这两个表之间的值(数据)差异。我的想法是使用 LEFT JOIN 或 INNER JOIN 两者都没有给出我想要的结果。应该注意的是,通常作为主键的 ID 不包含唯一值(我添加了一个 Serial_Number 列来解决这个问题)。我真的只需要看看已经改变的价值观。从图像中,您会注意到 5 和 6 的 Staff_ID 和 Amount 存在差异。在某些情况下,Staff_ID 相同但 Amount 已更改。

方法一:

FROM Database_2
LEFT JOIN Database_1 
ON  Database_2.Staff_ID = Database_1.Staff_ID```

Approach 2:
```SELECT * 
FROM Database_2
INNER JOIN Database_1 
ON  Database_2.Staff_ID = Database_1.Staff_ID```

Approach 3: (I added a Serial_Number column. This is not even working)
```SELECT Serial_Number, Staff_ID, PT, Price  FROM Database_1 
EXCEPT
SELECT Serial_Number, Staff_ID, PT, Price from Database_2;```


A minimal reproducible:

创建表 DB1 ( Serial_NumberINT, Staff_IDINT, PriceINT, PercentageNUMERIC(3, 2), ChangeVARCHAR(1) CHARACTER SET utf8); 插入 DB1 值 (1,53441,NULL,0.05,'Y'), (2,53441,NULL,NULL,NULL), (3,12855,500,NULL,NULL), (4,12855,NULL,NULL ,'Y'), (5,2005511,NULL,NULL,'Y'), (6,839123,1300,NULL,NULL);

创建表 DB2 ( Serial_NumberINT, Staff_IDINT, PriceINT, PercentageNUMERIC(3, 2), ChangeVARCHAR(1) CHARACTER SET utf8); 插入 DB2 值 (1,53441,NULL,0.05,NULL), (2,53441,550,NULL,'Y'), (3,12855,500,NULL,NULL), (4,12855,NULL,NULL ,'Y'), (5,2005511,600,NULL,'Y'), (6,839123,1300,NULL,NULL)

标签: mysqlsqlexcel

解决方案


我建议您使用对单元格使用真正绝对引用的 Excel 书籍,因此您可以将“新”粘贴到一张表中,将“旧”粘贴到另一张表中,在第三张表中您可以轻松查看差异。拥有真正绝对引用的原因是能够在“新”和“旧”工作表中删除/添加行和/或列,而 Excel 仍然通过它们的绝对位置比较单元格。在 Excel 中进行比较的另一个优点是,您可以设置阈值,当“新”和“旧”中的两个对应值被视为相同时,以忽略由二进制算术引起的微小差异的“错误警报”。

您可以从LightningGuide.net下载这样的 Excel 书籍,称为记录列表比较器。


推荐阅读