我有一个 Access 2010 表Assignment
key Empl Number
key Year Number
key Week Number
key Proj Number
它在给定的工作周内将员工分配给零个或多个项目,因此,所有四列构成了复合键。我有另一个表,Import
具有相同的结构,包含用于Assignment
根据不同选项更新的数据。
选项 1 保留所有现有分配,添加全新的导入,并忽略任何已存在的导入。
我可以使用简单的追加查询来管理它:
INSERT INTO Assignment
SELECT *
FROM Import
到目前为止,一切都很好。
选项 2 如上所述,除了分配和导入之间存在员工-年-周匹配的情况外,将现有分配替换为导入。
实现这一目标的一种方法是首先删除所有具有员工-年-周匹配项的记录,然后附加导入(如上所述)。结果应该是按原样替换完全匹配,用新项目替换部分(员工-年-周)匹配,并添加全新的分配。
我可以通过这个查询隔离匹配项,称为Existing
:
SELECT a.*
FROM Import AS i INNER JOIN Assignment AS a
ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week
如何删除Assignment
也在其中的记录Existing
?
我试过这个的变化
DELETE
FROM Assignment
WHERE IN (Existing)
所有导致错误消息。
顺便说一下,如果有这样的动物,我似乎可以使用MINUS
(or DIFFERENCE
) 查询:
Assignment
MINUS
Existing
该方法的一个小变化是首先删除具有 employee-year-week match和 project mismatch的记录,然后附加导入,如选项 1 所示。(删除和添加较少,但结果相同。)
我可以通过这个查询隔离那些匹配项,称为Existing_exp
:
SELECT a.*
FROM Import AS i INNER JOIN Assignment AS a
ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week AND a.Proj <> i.Proj
但我仍然需要完成如何从中删除记录的Assignment
任务Existing_exp
!
答案似乎隐藏在众目睽睽之下:
或者
取决于哪个最合适。
我不知道我第一次没看到它!