mysql - 有没有办法使用 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_Number
INT,
Staff_ID
INT,
Price
INT,
Percentage
NUMERIC(3, 2),
Change
VARCHAR(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_Number
INT,
Staff_ID
INT,
Price
INT,
Percentage
NUMERIC(3, 2),
Change
VARCHAR(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)
解决方案
我建议您使用对单元格使用真正绝对引用的 Excel 书籍,因此您可以将“新”粘贴到一张表中,将“旧”粘贴到另一张表中,在第三张表中您可以轻松查看差异。拥有真正绝对引用的原因是能够在“新”和“旧”工作表中删除/添加行和/或列,而 Excel 仍然通过它们的绝对位置比较单元格。在 Excel 中进行比较的另一个优点是,您可以设置阈值,当“新”和“旧”中的两个对应值被视为相同时,以忽略由二进制算术引起的微小差异的“错误警报”。
您可以从LightningGuide.net下载这样的 Excel 书籍,称为记录列表比较器。
推荐阅读
- html - 格式标题 ng-database/ng-template
- sql - Oracle 对象关系 - 如何在 PLSQL 中获取 REF(SELF)
- node.js - 在 Azure 中运行全栈 Web 应用程序时出现错误(POST 500 Internal Server Error)
- c# - 在 WebView2 中触发 onbeforeunload
- r - GAM 中的张量平滑预测极值
- java - 如何使用 java 将 Int8Array 保存到本地文件
- node.js - Mongoose Populate 返回 ObjectID 而不是内容
- android - 如何在 Glide 监听器中获取 http responseCode?
- excel - 如何检查值是否包含单元格范围内的值
- handlebars.js - 车把内更复杂的“If”条件