访问 - 比较两个表并在第一个表中更新或插入数据

时间:2015-03-25 21:53:25

标签: sql ms-access access-vba ado dao

在我的Access数据库中,我有两个表:

表1:

    PersNum Name    Surname
    2321    Lenora  Springer
    2320    Donya   Gugino
    3326    Leland  Wittmer
    4588    Elmer   Mcdill

表2:

    PersNum Name    Surname
    2321    Lenora  Farney
    2320    Donya   Willimas
    3326    Leland  Wittmer
    4588    Maya    Mcdill
    7785    Yolanda Southall
    1477    Hailey  Pinner 

我需要找到一种检查个人号码的方法(字段" PersNum"),如果PersNum存在,请更新Table1中的Name和Surname。如果PersNum不存在,请在Table1中插入新行。

预期结果:

    PersNum Name    Surname
    2321    Lenora  Farney      (updated surname)
    2320    Donya   Willimas    (updated surname)
    3326    Leland  Wittmer     (without change)
    4588    Maya    Mcdill      (without change)
    7785    Yolanda Southall    (new person)
    1477    Hailey  Pinner      (new person)

我正在寻找基于SQL / VBA / DAO / ADO的任何解决方案。

1 个答案:

答案 0 :(得分:1)

一个选项是" upsert"或组合追加/更新查询。

来自Smart Access的这个旧提示是我的最爱之一:

  

使用一个查询更新和附加记录

     

作者:Alan Biggs

     

您是否知道可以在Access中使用更新查询   同时更新和添加记录?如果你有这个,这很有用   表的两个版本,tblOld和tblNew,并且您想要集成   从tblNew到tblOld的变化。

     

请按照以下步骤操作:

     
      
  1. 创建更新查询并添加两个表。通过将tblNew的关键字段拖到tblOld的匹配字段来加入这两个表。

  2.   
  3. 双击关系并选择包含来自tblNew的所有记录的连接选项以及仅包含来自tblNew的记录的连接选项   tblOld。

  4.   
  5. 从tblOld中选择所有字段并将它们拖到QBE网格上。

  6.   
  7. 对于每个字段,在tblNew.FieldName中的“更新到”单元格类型中,其中FieldName与tblOld的字段名称匹配。

  8.   
  9. 从“视图”菜单中选择“查询属性”,并将“唯一记录”更改为“假”。 (这会关闭SQL中的DISTINCTROW选项   视图。如果你留下这个,你只能获得一个空白记录   结果,但您希望添加每个新记录的一个空白记录   to tblOld。)

  10.   
  11. 运行查询,您将看到对tblNew的更改现在位于tblOld中。

         

    这只会添加已添加到tblNew的tblOld记录。   在tblNew中没有出现的记录仍将保留在tblNew中   tblOld。

  12.