【问题标题】:How to append a table to another where the data being appended is not already in the appended table?如何将一个表附加到另一个表中,其中附加的数据尚未在附加表中?
【发布时间】:2014-10-11 17:08:38
【问题描述】:

我在 Ms Access 中有两个要附加的表,即 tblMaster 和 tblNew。问题是 tblNew 中的一些数据已经在 tblMaster 中。如何将 tblNew 附加到 tblMaster 并排除 tblMaster 中已经存在的数据?

【问题讨论】:

  • 数据是否完全一样?有主键吗?
  • 为了扩展@Brad 所说的内容,tblMaster 是否有一个存在于tblNew 中的外键?
  • tblMaster 中没有主键。我不是创建这个数据库的人,而且它的标准化很差。我被要求附加 tblNew 数据,而不创建 tblMaster 中已经存在的数据的副本。
  • 您使用哪些字段来判断数据是重复数据还是新数据?

标签: database ms-access vba ms-access-2010


【解决方案1】:

拥有一个特定的唯一键字段肯定是最简单的 - 但您仍然可以通过简单地使用组合字段作为唯一键来完成它(基本上是创建自己的键)。

然后您可以通过将新表链接到旧表来进行更新,在您指定应构成唯一键的字段上。

假设您有一个“Employees”表和一个“Employees New”表。您希望员工的姓名和徽章编号构成唯一键。这将是添加旧员工表中不存在的任何记录的 SQL。

INSERT INTO [Employees]
     ( FIELD1, 
       EMPLOYEENAME, 
       BADGENUMBER, 
       FIELD2, 
       FIELD3, 
       FIELD4 )
SELECT NEW.FIELD1, 
       NEW.EMPLOYEENAME, 
       NEW.BADGENUMBER, 
       NEW.FIELD2, 
       NEW.FIELD3, 
       NEW.FIELD4
  FROM [Employees New] AS NEW 
       LEFT JOIN [Employees] AS OLD 
                 ON (NEW.EMPLOYEENAME = OLD.EMPLOYEENAME) AND 
                    (NEW.BADGENUMBER = OLD.BADGENUMBER)
 WHERE (OLD.EMPLOYEENAME Is Null);

这通过使用确定构成主键的字段将“Employees”表与“Employees New”链接起来。它将结果限制为仅显示新员工不在旧员工表中的那些记录。

下一个决定是决定是否要使用新表中的值更新 Employee 表中的现有记录。如果是这样,你会使用这样的方法。

UPDATE [Employees] AS OLD 
       INNER JOIN [Employees New] AS NEW 
                  ON (OLD.BADGENUMBER = NEW.BADGENUMBER) AND 
                     (OLD.EMPLOYEENAME = NEW.EMPLOYEENAME) 
   SET OLD.Field1 = NEW.Field1,
       OLD.Field2 = NEW.Field2,
       OLD.Field3 = NEW.Field3,
       OLD.Field4 = NEW.Field4;

这通过连接“Employees”和“Employees New”表来工作,只显示两个表中唯一键字段匹配的记录。然后我们更新所有字段。

希望这能让你朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多