我想在Access中添加两个表,即tblMaster和tblNew。问题是tblNew中的一些数据已经存在于tblMaster中。如何将tblNew附加到tblMaster并排除已存在于tblMaster中的数据?
答案 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”表来实现,只显示两个表中唯一键字段匹配的记录。然后我们更新所有字段。
希望这会让你朝着正确的方向前进。