首页 文章

如何批量检查MS-Access和日志更改中的重复项?

提问于
浏览
2

我想在具有相同列结构的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 回答

  • 0

    这是从内存我没有实际运行这个,所以它可能需要一些修复 . 我很抱歉

    从记录更新开始

    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上设置触发器以更新表日志,但这不是最佳实践 .

    希望有所帮助,就像我说我还没有运行它 .

相关问题