如何批量检查 MS-Access 中的重复项并记录更改?
Posted
技术标签:
【中文标题】如何批量检查 MS-Access 中的重复项并记录更改?【英文标题】:How to mass-check for duplicates in MS-Access and log changes? 【发布时间】:2016-02-17 19:38:18 【问题描述】:我想在具有相同列结构的 2 个表之间批量比较 MS Access 中的数百个字段。如果列值之间有任何差异,则将 table1 中的行替换为 table2 中的新行。如果 table2 不再包含 table1 中存在的行,则应从 table1 中删除该行。对 table1 的所有更改都应记录在 tableLOGS 中。
举个例子:
____table1___ _____table2____ __________tableLOGS__________
| pid | A | B | | pid | A | B | | id | pid | A | B | action |
| 1 | 0 | 0 | | 1 | 0 | 0 | | 1 | 1 | 0 | 0 | add |
| 2 | 0 | 0 | | 2 | 0 | 1 | | 2 | 2 | 0 | 0 | add |
| 3 | 0 | 0 |
运行所需的 SQL 查询后,结果应该是:
____table1___ _____table2____ __________tableLOGS__________
| pid | A | B | | pid | A | B | | id | pid | A | B | action |
| 1 | 0 | 0 | | 1 | 0 | 0 | | 1 | 1 | 0 | 0 | add |
| 2 | 0 | 1 | | 2 | 0 | 1 | | 2 | 2 | 0 | 0 | add |
| 3 | 2 | 0 | 1 | edit |
| 4 | 3 | 0 | 0 | delete |
我希望这必须分解为 2 个单独的查询?
批量比较行和更新更改 将更改记录到 tableLOGS 这似乎是一个相当常见的任务,所以也许 MS Access 有一个简单的方法来完成这个?感谢所有的帮助! :)
附:我也愿意简单地从 table1 中删除与 table2 不匹配的行,并从 table2 中 INSERT INTO table1。
【问题讨论】:
【参考方案1】:这是记忆中的,我实际上并没有运行它,所以它可能需要一些修复。我的道歉
从记录更新开始
INSERT INTO TableLogs
SELECT A, B
FROM (
SELECT A, B
FROM table2 t2
INNER JOIN table1 t1 ON t1.pid = t2.pid
AND (t1.A <> t2.a OR t1.B <> t2.B)
WHERE table1.A IS NOT NULL)
然后用更新后的值更新 table1
UPDATE table1
INNER JOIN(
SELECT *
FROM table2 t2
INNER JOIN table1 t1 ON t1.pid = t2.pid
AND (t1.A <> t2.a OR t1.B <> t2.B)
WHERE table1.A IS NOT NULL) t2
ON table1.pid = t2.pid
在表 1 中记录缺失的记录
INSERT INTO tablelogs
SELECT A, B
FROM table2
INNER JOIN table1 t1 ON t1.pid = t2.pid AND (t1.A <> t2.a OR t1.B <> t2.B)
WHERE table1.A IS NOT NULL
从 table1 中删除缺失的行
DELETE table1
WHERE pid NOT IN
(SELECT pid FROM Table2)
您也可以在 table1 上放置一个触发器来更新表日志,但这并不是最佳实践。
希望对您有所帮助,就像我说我还没有运行它。
【讨论】:
以上是关于如何批量检查 MS-Access 中的重复项并记录更改?的主要内容,如果未能解决你的问题,请参考以下文章
如何比较数字子列表中的第一项,如果重复,比较第二项并选择第二项最小的子列表?
如何根据每条记录的连续表单中 ms-access 中的其他值填充文本框上的值