簡體   English   中英

訪問(VBA)-追加表中尚未存在的記錄

[英]Access (VBA) - Append Records Not Already In Table

我在表C上追加了查詢A,B。我正在基於C創建報表,但是我需要不同的行。 現在,我可以從C中選擇不同的行,但是我想隨即刪除它們(也就是說,隨着時間的推移,表C不再包含1,000,000,000條以上的記錄),因此該報表包含了C,過去,現在,直到最終用戶刪除它們為止。

我的問題就是這樣。 有什么方法可以將僅不同的行(不附加不同的行,而是附加到表的不同行)附加到表C? 如果不是直接可能的話,VBA?

使用約束來強制執行此行為,在這種情況下,使用(復合)主鍵: https : //support.office.com/zh-CN/article/Add-or-change-a-table-s-primary-key-in -訪問- 07b4a84b-0063-4d56-8b00-65f2975e4379

這樣可以確保您不能在表中插入重復的值,這意味着以后不必刪除重復的值。

在使數據集唯一的所有列上定義主鍵。

在添加pk或約束之前,請確保清理數據以刪除所有重復的行。 最簡單的方法可能是創建一個新表並通過使用當前表中的SELECT DISTINCT ....來填充它。

考慮使用三個NOT IN,NOT EXISTS或LEFT JOIN ... NULL查詢中的任何一個,以追加當前不在該表中的數據。 以下假設主鍵ID用於區分性

INSERT INTO TableC (Column1, Column2, Column3)
SELECT a.Column1, a.Column2, a.Column3
FROM QueryA a
LEFT JOIN TableC c
ON a.ID = c.ID
WHERE c.ID IS NULL;


INSERT INTO TableC (Column1, Column2, Column3)
SELECT a.Column1, a.Column2, a.Column3
FROM QueryA a
WHERE NOT EXISTS
   (SELECT 1 FROM TableC c
    WHERE a.ID = c.ID);


INSERT INTO TableC (Column1, Column2, Column3)
SELECT a.Column1, a.Column2, a.Column3
FROM QueryA a
WHERE a.ID NOT IN
   (SELECT c.ID FROM TableC c);

現在,如果沒有單個列而是多個字段表示唯一性,請添加到JOINWHERE子句中:

...
FROM QueryA a
LEFT JOIN TableC c
ON a.Column1 = c.Column1 AND a.Column2 = c.Column2 AND a.Column3 = c.Column3
WHERE a.Column1 IS NULL OR a.Column2 IS NULL OR a.Column3 IS NULL;

...
WHERE NOT EXISTS
   (SELECT 1 FROM TableC c
    WHERE a.Column1 = c.Column1 AND a.Column2 = c.Column2 AND a.Column3 = c.Column3);

...
WHERE a.Column1 NOT IN
   (SELECT c.Column1 FROM TableC c)
AND a.Column2 NOT IN
   (SELECT c.Column2 FROM TableC c)
AND a.Column3 NOT IN
   (SELECT c.Column3 FROM TableC c);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM