如何将表附加到附加数据中尚未附加数据的另一个表中?

时间:2014-08-18 17:50:46

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

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

1 个答案:

答案 0 :(得分: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”表来实现,只显示两个表中唯一键字段匹配的记录。然后我们更新所有字段。

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