在 Access 中尋找和刪除重複項:完整指南

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

關於 Access 中重複項目的圖片

如果您使用Microsoft Access資料庫遲早會遇到重複記錄。當多個使用者同時輸入數據,或資料庫設計(例如Access 中表格之間的關係)未能有效防止重複時,就會出現這些重複記錄。了解如何偵測重複記錄以及如何處理它們(隱藏、僅顯示一次、合併或刪除)是維護資料品質的關鍵。

沒有通用的方法:這取決於您是要尋找完全重複的記錄、需要容忍錯誤(例如名稱缺失或存在變體),還是只想安全地清理表。 Access提供了一個查找重複項的精靈、諸如 DISTINCT 和 GROUP BY 之類的 SQL 查詢,以及使用 DELETE 查詢批次刪除的功能。對於複雜情況,還有專門的去重工具,例如具有模糊搜尋功能的工具。

使用 Access Wizard 尋找重複項

對於 Access 使用者來說,最直接的方法是使用「重複查詢精靈」。此精靈會為您產生 SELECT 查詢,用於尋找在您選擇的欄位中具有符合值的記錄,以便您在做出任何決定之前查看結果。

如何一步步啟動和配置它,避免使用不必要的專業術語:開啟「建立」選項卡,然後前往「查詢精靈」。在對話方塊中,選擇「查詢精靈」以尋找重複項,然後確認繼續。

接下來,選擇您懷疑存在重複項的表(或查詢),例如您在 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) 來確定每個組中哪個是「主」記錄;其他記錄被視為刪除的候選記錄。

  使用 PowerPoint 中的投影片母版檢視進行精確、專業的編輯

刪除完全重複的項目。使用上述模式,您可以將剩餘 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 中重複項目的 SQL 查詢

難以消除的重複資料:具有容錯功能的「智慧型」重複資料刪除

現實生活中並非總是能找到完全相同的匹配項:比如重音符號、縮寫、多餘的空格,以及千變萬化的街道名稱等等……在這種情況下,你需要一個模糊(近似)搜索,它能夠接受部分匹配。 Access 本身並沒有內建強大的相似度引擎;這時就需要像 DataQualityTools 這樣的專業去重工具來解決這個問題。

這些工具能提供什麼功能?它們可以根據多個標準(例如,姓名+地址)查找足夠相似的記錄,允許設定相似度閾值(例如,街道50%),並將欄位組合成邏輯區塊進行聯合比較。

使用模糊去重工具的典型工作流程:安裝該工具,在「對錶進行去重」功能塊中建立一個去重項目,然後打開您的 Access 文件(如果文件位於伺服器上,則進行連接)。接下來,從該工具的下拉式選單中選擇目標資料庫和表。

  Word 和其他格式雙面列印完整指南

關鍵在於明確比較哪些欄位以及如何比較。例如,在地址清單中,您可以將街道欄位對應為“街道”,並設定 50% 的閾值,這樣只有街道名稱相似度超過該閾值的行才會被視為重複項。此外,通常也會將多個欄位(例如「名字」+「姓氏」+「公司」)分組,以便在確定兩筆記錄是否屬於同一人或實體之前,將它們放在一起進行比較。

配置進階選項(如有需要)後,搜尋隨即開始。結果通常以表格形式顯示,其中包含偵測到的分組以及建議的操作:保留哪些行、選擇哪些行、合併哪些行或刪除哪些行。這些工具可讓您在匯出或套用變更之前修正選擇(例如,取消選取不想刪除的行)。

如何將結果匯入 Access?常用的方法包括在表格的特定欄位中以「刪除」標記選取的記錄,或匯出 ID 清單。然後,在 Access 中,您可以執行刪除查詢,並按該欄位或標記的 ID 進行篩選。許多工具都提供試用期,以便您可以驗證其在自身資料上的去重效果。

Access 中的模糊重複資料刪除

安全搬遷:搬遷前檢查清單、搬遷諮詢、實際案例分析

在刪除任何內容之前,最好先做好準備。刪除操作無法撤銷,如果存在引用完整性關係,您可能會刪除超出預期範圍的內容。請查看以下簡要清單。

– 檢查一下 .accdb 檔案不是唯讀的.
– 如果共享,請要求其他用戶 關閉對象 您將與誰一起工作以避免阻礙和衝突。
– 如果您有權限, 以獨佔模式開啟基地 (檔案 > 開啟 > 開啟旁邊的箭頭 > 以獨佔模式開啟)。
- 做一個 備用。如果出現問題,這是恢復行的唯一真正方法。

如何在 Access 設計檢視中建立並執行刪除查詢?方法很簡單:首先,建立 SELECT 查詢,該查詢傳回的正是您想要刪除的內容,並進行驗證;然後將其轉換為刪除查詢。

引導步驟:在「建立」標籤上,前往「查詢設計」並新增受影響的表。雙擊星號 (*) 以查看所有字段,並將要用於篩選的字段添加到網格中(例如,使用 CustomerID 和 OrderDate 來查找已離職客戶的待處理訂單)。

輸入相關條件(例如客戶 ID、特定日期之後的日期等),並取消勾選這些條件欄位的「顯示」選項,以保持視圖簡潔。點擊“運行”以確認僅顯示要刪除的記錄。

如果您對結果滿意,請返回設計視圖,然後在「設計」標籤上按一下「刪除」。 Access會將查詢轉換為“刪除查詢”:它會隱藏“顯示”行並新增“刪除”行,您會在星號 (*) 列下看到“From”,在包含條件的列下看到“Where”。再次運行並確認。

  Windows 365 Link:從雲端執行 Windows 11 的迷你 PC

補充提示:如果您要比較表格或在一個表格中尋找在另一個表格中沒有符合項目的記錄(與重複項相反),Access 提供了精靈來協助您比較和尋找不符合的項目。這對於資料核對任務非常有用。

實際範例:「我只想從一個欄位中取得唯一值。」這個問題通常出現在這樣的執行緒中:使用者編寫`SELECT DISTINCT IdOperador FROM TRegO WHERE IdOperador IS NOT NULL`查詢,得到 105 行唯一值,但當新增其他欄位(CIF、Nombre)時,結果會增加 107、DELECT )語句中的所有欄位。原因很簡單:如果新增更多列,則所有列的組合必須是唯一的,因此 Nombre 欄位不同的行(例如,相差一個逗號、一個空格等)不再被視為重複項。

根據螢幕上需要顯示的內容,解決方案很明確:如果您只需要唯一的操作員 ID列表,則只需在 SELECT 語句中使用 DISTINCT 保留該欄位即可。如果您還想為每個操作員 ID 顯示另一個「代表性」列,請使用每組一行的策略

-- 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;

第一種方法傳回每個操作員 ID (ID 最高的那個)的完整「規範」行;第二種方法按群組(例如,按字母順序排列的最低值)提供聚合值。如果每個鍵只需要一行,請避免將 DISTINCT 與其他​​列混用;選擇 GROUP BY 或帶有 MAX/MIN 的子查詢即可獲得所需的控制。

如果最後階段是消除重複項,每個 OperatorId 只保留一行,則將前面的模式與刪除查詢結合起來:首先確定要從每個群組中保留哪個 Id(MAX(Id) 或 MIN(Id)),然後使用 DELETE…WHERE Id NOT IN (…保留…) 其餘的 Id,始終刪除事先備份。

在 Access 中安全刪除重複項

在 Access 中處理重複項時,明確目標至關重要:「不顯示重複項」並不等於「刪除記錄」或「尋找近似相似項」。精靈可以加快初始偵測速度,SQL 可以提供精準的去重能力(例如 DISTINCT、GROUP BY、自動連線和 DELETE 語句),而對於涉及位址和姓名等複雜情況,建議使用專用工具支援的模糊去重。透過備份、預先測試和精心設計的查詢,資料清理可以成為一個可靠且可重複的過程。

從 Excel 到 Access
相關文章:
如何快速輕鬆地將資料從 Excel 匯入 Access