- 根據您的目標選擇策略:顯示唯一項目、總結或刪除。
- Access 讓基於精靈的偵測變得簡單;SQL 提供完全的控制。
- 對於存在變化的數據,模糊重複數據刪除可以提高準確性。
- 刪除前請確認備份,以免造成不可挽回的損失。

如果您與 數據庫 de Microsoft Access遲早你會遇到重複記錄。例如,當多個使用者同時輸入數據,或設計不正確時,就會出現這些重複記錄。 Access中表之間的關係,並不阻止重複。 了解如何檢測它們以及如何處理它們(隱藏它們、顯示一次、合併它們或刪除它們)是關鍵。 以保持訊息的品質。
沒有單一的通用方法:這取決於您是否在尋找完全重複的內容,是否需要容錯(缺失或變體名稱),或者是否只是想安全地清理表格。 Access 提供了重複精靈、SQL 查詢(例如 DISTINCT 和 GROUP BY)以及使用刪除查詢執行批次刪除的功能。對於複雜的情況,有專門的帶有模糊搜尋的重複資料刪除工具。
使用 Access Wizard 尋找重複項
對於 Access 使用者來說,最直接的途徑是重複查詢精靈。 此精靈會為您產生選擇查詢,用於識別您選擇的欄位中具有符合值的記錄。,這樣您就可以在做出決定之前查看結果。
如何逐步啟動和配置它,無需不必要的技術細節: 開啟“建立”標籤並進入查詢精靈。在對話方塊中,選擇「Find Duplicates Query Wizard」並確認繼續。
然後 選擇您懷疑有重複項的表格(或查詢),例如 在 Access 中建立的表 然後點選“下一步”。嚮導會詢問哪些欄位必須符合才會被視為重複記錄;例如,人員文件中的姓名和出生日期,或訂單表中的客戶編號。
你也可以 選擇您想要在輸出中看到的其他字段 (它們不會影響比較,但它們可以幫助您檢查結果。)最後,Access 將建議一個查詢名稱,或者您可以設定自己的名稱; 按“完成” 運行它並查看匹配列表。
一旦你有了重複的查詢, 您可以將其用作編輯、合併或刪除的基礎如果您希望交叉引用多個資料表並偵測它們之間的重複項,請先建立一個組合資料的聯合查詢,然後根據該結果再次執行重複搜尋。

Access 中的 SQL:顯示、隱藏或清除重複項
當您需要更多控制(或自動化)時,Access SQL 查詢是您的盟友,例如當 更新 Access 中的記錄. 透過一些語句,您可以只列出唯一值、總結重複項或識別額外的行來處理它們。讓我們看看最常見的情況。
使用 DISTINCT 僅顯示每個唯一組合一次。 對於您不想看到相同重複值的報表很有用例如,每位顧客訂購的不同商品的清單:
從 customer_articles 選擇不同的 customer_id、article_no,依 customer_id、article_no 排序;
如果你還想 產生一個沒有重複項目的乾淨表,將其與 INTO 結合起來,從結果中建立一個新表:
從 customer_articles 選擇 DISTINCT customer_id、article_no 進入 table_new,依 customer_id、article_no 排序;
使用 GROUP BY 匯總並「隱藏」重複項。當您的目標是 分組並取得指標(重複次數、總數等) Access 中的計算字段),拉取 GROUP BY。例如,每件商品售出的次數以及相關的總收入:
SELECT article_no, COUNT(*) AS times, SUM(revenue) AS income FROM invoice_articles GROUP BY article_no ORDER BY times DESC, article_no;
透過行比較檢測精確重複項。如果您需要 識別在一個或多個欄位中共用相同值的記錄對或記錄群組 並準備刪除它,您可以使用表與自身的自連接,注意不要將一行與自身配對:
從表名中選擇 t1.id、t1.name、t2.id 為 duplicate_id,t2.name 作為 duplicate_name,從表名中選擇 t1,從表名中選擇 t2,其中 t1.name = t2.name 和 t1.id <> t2.id 和 t1.id =(從表名中選擇 tname MAX)為 tnamex.
注意兩個細節: 需要一個鍵(id)來唯一標識每一行。 並使用 MAX(id) 來確定每個群組中哪筆記錄是「主要」記錄;其他記錄被視為刪除候選記錄。
刪除完全重複。使用上述模式, 您可以將剩餘 ID 清單封裝在 DELETE 語句中。 從而清理每個組只留下一行:
從表名中刪除 id IN(從表名中選擇 t2.id 作為 t1,表名為 t2 其中 t1.name = t2.name 和 t1.id <> t2.id 和 t1.id =(從表名中選擇 MAX(id)為 tx 其中 tx.name = t1.name));
這種方法很容易擴展到 一次比較多個字段 (例如,姓名、街道、郵遞區號)。在執行 DELETE 作業之前,請務必進行備份;下面您將找到備份清單以及如何從設計視圖將查詢轉換為刪除查詢。
不同表格之間存在重複項?如果您的資料分散在多個表中或來自 Excel, 將資料從 Excel 匯入到 Access 首先建立一個堆疊「相容」行的聯合查詢是一個很好的做法:您可以在結果聯合上應用 DISTINCT、GROUP BY 或自動連接來發現重疊。

難以消除的重複資料:具有容錯功能的「智慧型」重複資料刪除
現實生活中並不總是會出現完全相同的情況:有重音符號、縮寫、多餘的空格、以千種方式書寫的街道……在這些情況下, 您需要一個接受部分匹配的模糊(近似)搜尋。Access 並沒有配備開箱即用的強大相似性引擎;這時,專門的重複資料刪除工具(例如 DataQualityTools)就發揮作用了。
這些工具提供了什麼? 根據幾個標準(例如姓名+地址)找到足夠「相似」的記錄,允許您設定相似度閾值(例如,街道為 50%)並將欄位組合成邏輯區塊以將它們一起進行比較。
模糊重複資料刪除實用程式的典型工作流程:安裝該工具, 在「表格中的重複資料刪除」功能區塊中建立重複資料刪除項目 並開啟您的 Access 檔案(如果檔案位於伺服器上,則連接到該檔案)。然後從工具的下拉式選單中選擇目標資料庫和表。
關鍵點來了: 指示比較哪些欄位以及如何比較例如,在地址清單中,您可以將街道欄位對應到“街道”,並設定 50% 的閾值,這樣只有街道名稱相似度超過該閾值的行才會被視為重複。此外, 將多列進行分組 (例如「名字」+「姓氏」+「公司」)進行比較,然後才能決定兩個記錄是否屬於同一個人或實體。
配置進階選項(如果需要)後,開始搜尋。 結果通常顯示在表格中,其中包含偵測到的群組和行動建議。:選擇要保留的行、要標記的行、要合併的行或要刪除的行。這些工具可讓您在匯出或套用變更之前更正您的選擇(例如,取消選擇不想刪除的行)。
如何將結果傳輸到Access?常用選項: 在表格的特定欄位中以「刪除標記」標記選定的記錄 或匯出 ID 清單。然後,在 Access 中,執行按該欄位或所選 ID 篩選的重複資料刪除查詢。許多工具都提供試用期,以便您驗證重複資料刪除在您自己的資料上的效果。

安全搬遷:搬遷前檢查清單、搬遷諮詢、實際案例分析
在刪除任何內容之前,最好先做好準備。 刪除操作無法撤銷,並且如果存在具有參考完整性的關係,則刪除的資料可能會超出預期。請查看此快速檢查清單。
– 檢查一下 .accdb 檔案不是唯讀的.
– 如果共享,請要求其他用戶 關閉對象 您將與誰一起工作以避免阻礙和衝突。
– 如果您有權限, 以獨佔模式開啟基地 (檔案 > 開啟 > 開啟旁邊的箭頭 > 以獨佔模式開啟)。
- 做一個 備用。如果出現問題,這是恢復行的唯一真正方法。
如何在 Access 的設計檢視中建立並執行刪除查詢?方法很簡單: 首先建立一個選擇查詢,返回您想要刪除的內容 並驗證;然後將其轉換為刪除。
指導步驟:在「建立」標籤上,前往「查詢設計」並 加入受影響的表雙擊星號 (*) 查看所有字段,並將要過濾的字段添加到網格中(例如,CustomerID 和 OrderDate 可以找到不再與我們合作的客戶的待處理訂單)。
輸入適當的標準(客戶 ID、某一天之後的日期等)並 取消選取這些條件欄位中的“顯示” 以保持視圖整潔。按一下「執行」以驗證是否僅顯示要刪除的記錄。
一旦您清楚這一點,請返回“設計視圖”,然後在“設計”標籤上按一下“刪除”。 Access 會將查詢轉換為“刪除查詢”:這將隱藏“顯示”行並新增“刪除”行,您將在星號 (*) 列下看到“寄件者”,並在條件列下看到“地點”。再次運行並確認。
額外提示:如果您正在比較表格或在一個表格中尋找另一個表格中沒有符合的記錄(與重複相反), Access 提供了用於比較和定位不符項目的精靈。它在數據協調任務中很有用。
用例:「我只想要欄位中唯一的值。」在一個典型的執行緒中,會出現這樣的問題:使用者輸入 從 TregO 中選擇不同的 OperatorId,其中 OperatorId 不為空 您將獲得 105 個唯一行,但是當您新增其他欄位(CIF、Name)時,結果會增加(107、116…),因為 DISTINCT 適用於 SELECT 中的所有欄位解釋很簡單: 如果新增更多列,則整個組合必須是唯一的。,因此名稱不同的行(逗號、額外的空格等)不再分組為重複項。
根據您需要在螢幕上看到的內容來明確解決方案:如果您只想要 唯一操作員 ID,在 SELECT 語句中使用 DISTINCT 僅保留該欄位。如果您還想為每個 IdOperator 顯示另一個「代表」列, 使用每組一行的策略:
-- 1) 依群組選擇穩定的行(例如,具有最高 Id 的行) SELECT t.* FROM TRegO AS t INNER JOIN ( SELECT IdOperador, MAX(Id) AS IdMax FROM TRegO WHERE IdOperador IS NOT N 2) 或按群組傳回聚合(第一個或最低的字母值) SELECT IdOperador, MIN(Nombre) AS NombreExample, MIN(CIF) AS CIFExample FROM TRegO WHERE IdOperador IS NOT NULL GROUP BY IdOperador;
第一個選項返回 IdOperator 的「規範」完整行 (ID 最高的那個);第二個提供按組聚合的值(例如,按字母順序排列的最低的那個)。如果每個鍵只需要一行,請避免將 DISTINCT 與其他欄位混合使用; 選擇 GROUP BY 或使用 MAX/MIN 的子選擇 將為您提供您所尋求的控制。
如果最後階段是消除重複項,每個 IdOperator 只留下一行, 將上述模式與刪除查詢結合起來:先確定要保留的每個群組的哪個 Id(MAX(Id)或 MIN(Id)),然後使用 DELETE...WHERE Id NOT IN(... kept ...)刪除其餘的 Id,並始終使用先前的備份。

在 Access 中消除重複項時,明確目標非常重要: 「不顯示重複項」與「刪除記錄」或「尋找近似相似項」不同嚮導加速了初始檢測,SQL 為您提供精準的查詢(DISTINCT、GROUP BY、自連接和 DELETE),對於涉及地址和姓名的複雜情況,由專用工具支援的模糊重複資料刪除是一個不錯的選擇。透過備份、預先測試和精心的查詢設計,資料清理將成為一個可靠且可重複的過程。
對字節世界和一般技術充滿熱情的作家。我喜歡透過寫作分享我的知識,這就是我在這個部落格中要做的,向您展示有關小工具、軟體、硬體、技術趨勢等的所有最有趣的事情。我的目標是幫助您以簡單有趣的方式暢遊數位世界。
