如何批量检查 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 中的重复项并记录更改?的主要内容,如果未能解决你的问题,请参考以下文章

C++:如何检测向量中的重复项并打印一份?

如何比较数字子列表中的第一项,如果重复,比较第二项并选择第二项最小的子列表?

如何根据每条记录的连续表单中 ms-access 中的其他值填充文本框上的值

Excel删除重复数据及用公式筛选重复项并标记颜色突出显示

在 PostgreSQL 12 上使用 WITH 查找唯一值、计算重复项并对其进行排名

如何在 VBA 代码中的 ms-access 中执行查询?