有没有办法使用 SQL 或 EXCEL 跟踪两个表的更改?

Posted

技术标签:

【中文标题】有没有办法使用 SQL 或 EXCEL 跟踪两个表的更改?【英文标题】:Is there a way to track changes on two tables using SQL or and EXCEL? 【发布时间】:2021-10-27 11:58:55 【问题描述】:

我有一个问题,希望这里有人可以帮助我。我有 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, Percentage 数字 (3, 2), Change VARCHAR(1) 字符集 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, Percentage 数字(3, 2), Change VARCHAR(1) 字符集 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)

【问题讨论】:

我们对您的表结构完全不了解,请尝试提供两个表中的数据样本以及您所说的差异,即列中数据的差异,或记录数的差异。预期的输出很有帮助 @paulr23 谢谢。我现在已经在问题中澄清了这一点。 【参考方案1】:

要查看新行中的行,而不是旧行:

SELECT * FROM new a
WHERE NOT EXISTS (
    SELECT 1 FROM old b
    WHERE a.Serial_Number = b.Serial_Number 
    AND a.Staff_ID = b.Staff_ID
    AND a.PT = b.PT
    AND a.Price = b.Price
)

类似于查看旧的行而不是新的行。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于有没有办法使用 SQL 或 EXCEL 跟踪两个表的更改?的主要内容,如果未能解决你的问题,请参考以下文章

从 Microsoft 服务跟踪查看器导出数据

将excel数据导入sql中,出现科学计数法

SQLAlchemy添加数据

使用 sqoop 的两个 (PL)/SQL 查询

VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表

将 Excel 工作表保存到 SQL 中