Subquery
如何根據它們在另一個表中的存在從表中減去記錄
我有一個 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
(或DIFFERENCE
)查詢:Assignment MINUS Existing
該方法的一個小變化是首先刪除具有員工-年-週匹配和項目不匹配的記錄,然後追加導入,如選項 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
!
答案似乎隱藏在顯而易見的地方:
DELETE 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
要麼
DELETE 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
取決於哪個最合適。
我不知道我第一次怎麼看不到它!