- Chọn chiến lược dựa trên mục tiêu của bạn: hiển thị các mục duy nhất, tóm tắt hoặc xóa.
- Access giúp phát hiện dễ dàng bằng trình hướng dẫn; SQL cung cấp khả năng kiểm soát hoàn toàn.
- Đối với dữ liệu có nhiều biến thể, việc loại bỏ trùng lặp mờ sẽ cải thiện độ chính xác.
- Trước khi xóa, hãy xác minh và sao lưu để tránh mất mát không thể phục hồi.
Nếu bạn làm việc với cơ sở dữ liệu de Microsoft AccessSớm muộn gì bạn cũng sẽ gặp phải các bản ghi trùng lặp. Những bản ghi trùng lặp này xuất hiện khi nhiều người dùng nhập dữ liệu cùng lúc hoặc khi thiết kế, chẳng hạn, không chính xác. mối quan hệ giữa các bảng trong Access, không ngăn chặn sự lặp lại. Hiểu cách phát hiện chúng và cách xử lý chúng (ẩn, hiển thị một lần, hợp nhất hoặc xóa chúng) là điều quan trọng. để duy trì chất lượng thông tin.
Không có phương pháp chung nào cả: nó phụ thuộc vào việc bạn đang tìm kiếm các bản sao chính xác, cần dung sai lỗi (tên bị thiếu hoặc tên biến thể) hay chỉ muốn dọn dẹp bảng một cách an toàn. Access cung cấp trình hướng dẫn sao chép, các truy vấn SQL như DISTINCT và GROUP BY, cùng khả năng xóa hàng loạt bằng các truy vấn xóa.Đối với những trường hợp phức tạp, có các công cụ loại bỏ trùng lặp chuyên dụng với chức năng tìm kiếm mờ.
Tìm bản sao bằng Trình hướng dẫn Access
Con đường trực tiếp nhất dành cho người dùng Access là Trình hướng dẫn truy vấn trùng lặp. Trình hướng dẫn này sẽ tạo cho bạn một truy vấn chọn để xác định các bản ghi có giá trị khớp trong các trường bạn chọn., vì vậy bạn có thể xem lại kết quả trước khi đưa ra quyết định.
Cách khởi chạy và cấu hình từng bước mà không cần các thủ thuật kỹ thuật không cần thiết: Mở tab Tạo và vào Trình hướng dẫn truy vấn. Trong hộp thoại, chọn Trình hướng dẫn truy vấn Tìm mục trùng lặp và xác nhận để tiếp tục.
Sau đó chọn bảng (hoặc truy vấn) mà bạn nghi ngờ có sự trùng lặp, ví dụ như một bảng được tạo trong Access và nhấp vào Tiếp theo. Trình hướng dẫn sẽ hỏi bạn những trường nào phải khớp để một bản ghi được coi là trùng lặp; ví dụ: tên và ngày sinh trong tệp nhân sự hoặc mã số khách hàng trong bảng đơn hàng.
Bạn cũng có thể chọn các trường bổ sung mà bạn muốn thấy trong đầu ra (Chúng không ảnh hưởng đến quá trình so sánh, nhưng chúng giúp bạn kiểm tra kết quả.) Cuối cùng, Access sẽ đề xuất tên truy vấn hoặc bạn có thể tự đặt tên; nhấn Kết thúc để chạy và xem lại danh sách các trận đấu.
Khi bạn có truy vấn trùng lặp, Bạn có thể sử dụng nó làm cơ sở để chỉnh sửa, hợp nhất hoặc xóaNếu bạn muốn tham chiếu chéo nhiều bảng và phát hiện các mục trùng lặp giữa chúng, trước tiên hãy tạo truy vấn hợp nhất để kết hợp dữ liệu và dựa trên kết quả đó, chạy lại tìm kiếm mục trùng lặp.
SQL trong Access: Hiển thị, Ẩn hoặc Dọn dẹp các mục trùng lặp
Khi bạn cần kiểm soát nhiều hơn (hoặc tự động hóa), các truy vấn Access SQL sẽ là đồng minh của bạn, ví dụ như khi cập nhật bản ghi trong Access. Chỉ với một vài câu lệnh, bạn có thể liệt kê các giá trị duy nhất, tóm tắt các lần lặp lại hoặc xác định các hàng bổ sung để xử lý chúng.Chúng ta hãy xem xét những trường hợp phổ biến nhất.
Hiển thị mỗi tổ hợp duy nhất chỉ một lần với DISTINCT. Hữu ích cho các báo cáo mà bạn không muốn thấy sự lặp lại giống hệt nhau của một giá trị, ví dụ, danh sách các mặt hàng khác nhau được mỗi khách hàng đặt hàng:
CHỌN DISTINCT customer_id, số bài viết TỪ customer_articles ORDER BY customer_id, số bài viết;
Nếu bạn cũng muốn tạo một bảng sạch không có bản sao, kết hợp nó với INTO để tạo một bảng mới từ kết quả:
CHỌN DISTINCT customer_id, article_no VÀO table_new TỪ customer_articles ORDER BY customer_id, article_no;
Tóm tắt và "ẩn" các mục trùng lặp bằng GROUP BY. Khi mục tiêu của bạn là nhóm và lấy số liệu (số lần đại diện, tổng, v.v. và các trường được tính toán trong Access), kéo GROUP BY. Ví dụ: số lần mỗi mặt hàng được bán và tổng doanh thu tương ứng:
CHỌN số bài viết, ĐẾM(*) LÀ lần, TỔNG(doanh thu) LÀ doanh thu TỪ hóa đơn_bài viết NHÓM THEO số bài viết SẮP XẾP THEO lần GIẢM, số bài viết;
Phát hiện các bản sao chính xác bằng cách so sánh hàng. Nếu bạn cần Xác định các cặp hoặc nhóm bản ghi có cùng giá trị trong một hoặc nhiều trường và chuẩn bị cho việc xóa nó, bạn có thể sử dụng lệnh tự nối của bảng với chính nó, chú ý không ghép một hàng với chính nó:
CHỌN t1.id, t1.name, t2.id LÀ duplicate_id, t2.name LÀ duplicate_name TỪ tên bảng LÀ t1, tên bảng LÀ t2 NƠI t1.name = t2.name VÀ t1.id <> t2.id VÀ t1.id = (CHỌN MAX(id) TỪ tên bảng LÀ tx NƠI tx.name = t1.name );
Lưu ý hai chi tiết: Cần có một khóa (id) để xác định duy nhất từng hàng. và MAX(id) được sử dụng để xác định bản ghi nào là bản ghi “chính” trong mỗi nhóm; các bản ghi khác được coi là ứng cử viên để xóa.
Loại bỏ các bản sao chính xác. Sử dụng mẫu trên, Bạn có thể đóng gói danh sách các id còn sót lại trong câu lệnh DELETE. và do đó chỉ để lại một hàng cho mỗi nhóm:
XÓA TỪ tên bảng NƠI id TRONG (CHỌN t2.id TỪ tên bảng LÀ t1, tên bảng LÀ t2 NƠI t1.name = t2.name VÀ t1.id <> t2.id VÀ t1.id = (CHỌN MAX(id) TỪ tên bảng LÀ tx NƠI tx.name = t1.name) );
Cách tiếp cận này có thể dễ dàng mở rộng so sánh nhiều trường cùng một lúc (ví dụ: tên, đường phố, mã bưu chính). Luôn sao lưu trước khi chạy lệnh XÓA; bên dưới bạn sẽ tìm thấy danh sách kiểm tra sao lưu và cách chuyển đổi truy vấn thành truy vấn xóa từ chế độ xem thiết kế.
Có trùng lặp giữa các bảng khác nhau không? Nếu dữ liệu của bạn nằm rải rác trên nhiều bảng hoặc đến từ Excel, nhập dữ liệu từ Excel vào Access và trước tiên, tạo truy vấn hợp nhất xếp chồng các hàng "tương thích" là một cách làm hay: bạn có thể áp dụng DISTINCT, GROUP BY hoặc tự động nối vào hợp nhất kết quả để phát hiện sự chồng chéo.
Bản sao khó: loại bỏ trùng lặp “thông minh” với khả năng chịu lỗi
Cuộc sống thực không phải lúc nào cũng mang lại những bản sao chính xác: có những dấu trọng âm, chữ viết tắt, khoảng cách thừa, những con phố được viết theo hàng ngàn cách... Trong những trường hợp đó, Bạn cần một tìm kiếm mơ hồ (xấp xỉ) chấp nhận các kết quả khớp một phần.Access không có sẵn công cụ so sánh tương đồng mạnh mẽ; đây là lúc các công cụ loại bỏ trùng lặp chuyên dụng, chẳng hạn như DataQualityTools, phát huy tác dụng.
Những công cụ này cung cấp những gì? Tìm các bản ghi đủ “tương tự” theo một số tiêu chí (ví dụ: tên + địa chỉ), cho phép bạn đặt ngưỡng tương đồng (ví dụ: 50% cho đường phố) và kết hợp các trường thành các khối logic để so sánh chúng với nhau.
Quy trình làm việc điển hình với tiện ích loại bỏ trùng lặp mờ: cài đặt công cụ, Tạo một dự án loại bỏ trùng lặp trong khối chức năng “loại bỏ trùng lặp trong bảng” và mở tệp Access của bạn (hoặc kết nối với tệp nếu tệp nằm trên máy chủ). Sau đó, chọn cơ sở dữ liệu và bảng mục tiêu từ menu thả xuống của công cụ.
Điểm mấu chốt là: chỉ ra những cột nào được so sánh và cách so sánhVí dụ, trong danh sách địa chỉ, bạn có thể ánh xạ trường đường phố thành "Đường phố" và đặt ngưỡng 50% để chỉ những hàng có độ tương đồng về tên đường vượt quá ngưỡng đó mới được coi là trùng lặp. Điều này cũng phổ biến nhóm nhiều cột (chẳng hạn như “Tên” + “Họ” + “Công ty”) để so sánh với nhau trước khi quyết định xem hai bản ghi có thuộc về cùng một người hoặc tổ chức hay không.
Sau khi cấu hình các tùy chọn nâng cao (nếu cần), hãy bắt đầu tìm kiếm. Kết quả thường được hiển thị trong bảng với các nhóm được phát hiện và đề xuất hành động.: hàng nào cần giữ lại, hàng nào cần đánh dấu, hàng nào cần gộp hoặc hàng nào cần xóa. Các công cụ cho phép bạn sửa lựa chọn (ví dụ: bỏ chọn hàng bạn không muốn xóa) trước khi xuất hoặc áp dụng các thay đổi.
Làm thế nào để chuyển kết quả sang Access? Các tùy chọn phổ biến: Đánh dấu các bản ghi đã chọn bằng "dấu xóa" trong một trường cụ thể của bảng của bạn hoặc xuất danh sách ID. Sau đó, trong Access, hãy chạy truy vấn loại bỏ trùng lặp, lọc theo trường đó hoặc theo ID đã chọn. Nhiều công cụ cung cấp thời gian dùng thử để bạn có thể tự kiểm tra chất lượng loại bỏ trùng lặp trên dữ liệu của mình.
Tháo dỡ an toàn: danh sách kiểm tra trước khi tháo dỡ, tư vấn tháo dỡ và nghiên cứu trường hợp thực tế
Trước khi xóa bất cứ thứ gì, bạn nên chuẩn bị. Không thể hoàn tác việc xóavà nếu có các mối quan hệ có tính toàn vẹn tham chiếu, bạn có thể xóa nhiều hơn dự kiến. Xem lại danh sách kiểm tra nhanh này.
- Kiểm tra xem tệp .accdb không chỉ đọc.
– Nếu chia sẻ, hãy yêu cầu người dùng khác đóng các đối tượng bạn sẽ làm việc cùng ai để tránh những bế tắc và xung đột.
– Nếu bạn có quyền, mở căn cứ ở chế độ độc quyền (Tệp > Mở > mũi tên bên cạnh Mở > Mở ở Chế độ độc quyền).
- Làm một sao lưu. Đây là cách duy nhất thực sự để khôi phục các hàng nếu có sự cố xảy ra.
Làm thế nào để tạo và chạy truy vấn xóa từ chế độ xem Thiết kế của Access? Công thức rất đơn giản: Đầu tiên hãy xây dựng một truy vấn chọn trả về chính xác những gì bạn định xóa và xác minh nó; sau đó chuyển nó thành xóa.
Các bước hướng dẫn: Trên tab Tạo, hãy đi tới Thiết kế truy vấn và thêm bảng bị ảnh hưởng. Nhấp đúp vào dấu hoa thị (*) để xem tất cả các trường và thêm các trường bạn sẽ lọc vào lưới (ví dụ: CustomerID và OrderDate để tìm các đơn hàng đang chờ xử lý của khách hàng không còn sử dụng dịch vụ của chúng tôi).
Nhập các tiêu chí thích hợp (ID khách hàng, ngày sau một ngày nhất định, v.v.) và bỏ chọn "Hiển thị" trong các trường tiêu chí đó để giữ cho chế độ xem gọn gàng. Nhấp vào Chạy để xác minh rằng chỉ những bản ghi bạn muốn xóa mới xuất hiện.
Sau khi hoàn tất, hãy quay lại Chế độ thiết kế và trên tab Thiết kế, nhấp vào Xóa. Access sẽ chuyển đổi truy vấn thành "truy vấn xóa": Thao tác này sẽ ẩn hàng Hiển thị và thêm hàng Xóa, tại đó bạn sẽ thấy "Từ" bên dưới cột dấu hoa thị (*) và "Ở đâu" bên dưới cột tiêu chí. Chạy lại và xác nhận.
Mẹo thưởng: Nếu bạn đang so sánh các bảng hoặc tìm kiếm các bản ghi trong một bảng không khớp với bảng khác (ngược lại với bản ghi trùng lặp), Access cung cấp trình hướng dẫn để so sánh và xác định vị trí các mục không khớp.Nó hữu ích trong các nhiệm vụ đối chiếu dữ liệu.
Trường hợp sử dụng: "Tôi chỉ muốn các giá trị duy nhất từ một trường." Trong một luồng thông thường, vấn đề này phát sinh: người dùng nhập CHỌN DISTINCT OperatorId TỪ TregO NƠI OperatorId KHÔNG PHẢI NULL và bạn nhận được 105 hàng duy nhất, nhưng khi bạn thêm các trường khác (CIF, Tên) thì kết quả tăng lên (107, 116…) vì DISTINCT áp dụng cho tất cả các cột trong SELECTGiải thích rất đơn giản: Nếu bạn thêm nhiều cột hơn, toàn bộ tổ hợp phải là duy nhất., do đó các hàng khác nhau về Tên (bằng dấu phẩy, khoảng trắng thừa, v.v.) sẽ không còn được nhóm là trùng lặp nữa.
Giải pháp rõ ràng tùy thuộc vào những gì bạn cần xem trên màn hình: nếu bạn chỉ muốn danh sách Id toán tử duy nhất, chỉ giữ lại trường đó trong SELECT với DISTINCT. Nếu bạn cũng muốn hiển thị một cột "đại diện" khác cho mỗi IdOperator, sử dụng chiến lược một hàng cho mỗi nhóm:
-- 1) Chọn một hàng ổn định theo nhóm (ví dụ, hàng có Id cao nhất) SELECT t.* FROM TRegO AS t INNER JOIN ( SELECT IdOperador, MAX(Id) AS IdMax FROM TRegO WHERE IdOperador IS NOT NULL GROUP BY IdOperador ) AS g ON t.IdOperador = g.IdOperador AND t.Id = g.IdMax; -- 2) Hoặc trả về tổng hợp theo nhóm (giá trị chữ cái đầu tiên hoặc thấp nhất) SELECT IdOperador, MIN(Nombre) AS NombreExample, MIN(CIF) AS CIFExample FROM TRegO WHERE IdOperador IS NOT NULL GROUP BY IdOperador;
Tùy chọn đầu tiên trả về một hàng đầy đủ "chuẩn" của IdOperator (cái có ID cao nhất); cái thứ hai cung cấp các giá trị tổng hợp theo nhóm (ví dụ: thấp nhất theo thứ tự bảng chữ cái). Tránh kết hợp DISTINCT với các cột bổ sung nếu bạn chỉ cần một hàng cho mỗi khóa; chọn NHÓM THEO hoặc một mục chọn phụ với MAX/MIN sẽ mang lại cho bạn khả năng kiểm soát mà bạn đang tìm kiếm.
Nếu giai đoạn cuối cùng là loại bỏ các bản sao để lại một hàng duy nhất cho mỗi IdOperador, kết hợp mẫu trên với truy vấn xóa: Trước tiên, hãy xác định Id nào của mỗi nhóm mà bạn muốn giữ lại (MAX(Id) hoặc MIN(Id)) và xóa phần còn lại bằng lệnh DELETE…WHERE Id NOT IN (… kept …), luôn luôn sao lưu trước đó.
Khi xử lý các mục trùng lặp trong Access, điều quan trọng là phải xác định rõ mục tiêu: “Không hiển thị bản sao” không giống với “xóa bản ghi” hoặc “tìm điểm tương đồng gần đúng”Trình hướng dẫn tăng tốc độ phát hiện ban đầu, SQL cung cấp độ chính xác cao (DISTINCT, GROUP BY, tự nối và DELETE), và đối với các trường hợp phức tạp liên quan đến địa chỉ và tên, việc loại bỏ trùng lặp mờ được hỗ trợ bởi các công cụ chuyên dụng là một ý tưởng hay. Với việc sao lưu, kiểm tra trước và thiết kế truy vấn cẩn thận, việc làm sạch dữ liệu trở thành một quy trình đáng tin cậy và có thể lặp lại.
Người viết đam mê về thế giới byte và công nghệ nói chung. Tôi thích chia sẻ kiến thức của mình thông qua viết lách và đó là những gì tôi sẽ làm trong blog này, cho bạn thấy tất cả những điều thú vị nhất về tiện ích, phần mềm, phần cứng, xu hướng công nghệ, v.v. Mục tiêu của tôi là giúp bạn điều hướng thế giới kỹ thuật số một cách đơn giản và thú vị.