Cách loại bỏ dữ liệu trùng lặp trong Oracle
24/02/2025
Nội dung bài viết
Khi làm việc với Oracle, việc gặp phải dữ liệu trùng lặp là điều không hiếm. Bạn có thể dễ dàng xóa các dòng dữ liệu trùng lặp bằng cách xác định và sử dụng RowID hoặc địa chỉ dòng cụ thể. Để đảm bảo an toàn, hãy sao lưu cơ sở dữ liệu trước khi thực hiện bất kỳ thao tác nào.
Quy trình thực hiện
Xác định các bản ghi trùng lặp

Nhận diện dữ liệu trùng lặp. Trong ví dụ này, chúng ta sẽ xác định dữ liệu trùng lặp dựa trên tên "Alan". Đảm bảo rằng dữ liệu cần loại bỏ thực sự bị trùng lặp bằng cách sử dụng câu truy vấn SQL (Ngôn ngữ truy vấn có cấu trúc) như bên dưới.

Tìm kiếm trong cột có tên "Names". Trong ví dụ này, bạn sẽ thay thế "column_name" bằng "Names" để xác định dữ liệu trùng lặp trong cột tên.

Tìm kiếm trong cột khác. Nếu bạn muốn xác định dữ liệu trùng lặp trong một cột khác, chẳng hạn như cột tuổi (Ages) thay vì tên, hãy thay thế "column_name" bằng "Ages". Các trường hợp khác cũng được thực hiện tương tự.
select column_name, count(column_name) from table group by column_name having count (column_name) > 1;
Loại bỏ một bản ghi trùng lặp

Chọn "name from names". Sau khi nhập "SQL", bạn tiếp tục nhập "select name from names" để truy vấn dữ liệu.

Xóa tất cả các dòng có tên trùng lặp. Sau "SQL", hãy nhập "delete from names where name='Alan';". Lưu ý rằng việc viết hoa rất quan trọng, vì điều này sẽ xóa tất cả các dòng có tên "Alan". Sau đó, nhập "commit" để hoàn tất thao tác.

Chèn lại dòng không có dữ liệu trùng lặp. Sau khi xóa tất cả các dòng có tên "Alan", bạn có thể chèn lại một bản ghi mới bằng cách nhập "insert into names values ('Alan');". Sau đó, nhập "commit" để hoàn tất thao tác.

Kiểm tra danh sách mới. Sau khi hoàn thành các bước trên, bạn có thể xác minh rằng không còn dữ liệu trùng lặp bằng cách nhập "select * from names".
SQL > select name from names; NAME ------------------------------ Alan Carrie Tom Alan rows selected. SQL > delete from names where name='Alan'; rows deleted. SQL > commit; Commit complete. SQL > insert into names values ('Alan'); row created. SQL > commit; Commit complete. SQL > select * from names; NAME ------------------------------ Alan Carrie Tom rows selected.
Loại bỏ nhiều bản ghi trùng lặp

Chọn RowID cần xóa. Sau "SQL", nhập "select rowid, name from names;" để xác định các dòng cần loại bỏ.

Xóa các bản ghi trùng lặp. Sau "SQL", nhập "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name);" để loại bỏ tất cả các dòng dữ liệu trùng lặp.

Kiểm tra dữ liệu trùng lặp. Sau khi hoàn thành các bước trên, hãy xác minh xem còn dữ liệu trùng lặp nào không bằng cách nhập lệnh "select rowid, name from names;" và "commit".
SQL > select rowid,name from names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan rows selected. SQL > delete from names a where rowid > (select min(rowid) from names b where b.name=a.name ); rows deleted. SQL > select rowid,name from names; ROWID NAME ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom rows selected. SQL > commit; Commit complete.
Loại bỏ dòng dựa trên cột

Chọn dòng cần xóa. Sau "SQL", nhập "select * from names;" để xem các dòng dữ liệu hiện có.

Xóa các dòng trùng lặp bằng cách xác định cột. Sau "SQL", nhập "delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age);" để loại bỏ các bản ghi trùng lặp.

Kiểm tra lại dữ liệu. Sau khi hoàn thành các bước trên, nhập "select * from names;" và "commit" để đảm bảo rằng tất cả dữ liệu trùng lặp đã được xóa.
SQL > select * from names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 rows selected. SQL > delete from names a where rowid > (select min(rowid) from names b where b.name=a.name and b.age=a.age ); row deleted. SQL > select * from names; NAME AGE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 rows selected. SQL > commit; Commit complete.
Lưu ý quan trọng
- Trước khi thực hiện bất kỳ thao tác xóa dữ liệu nào, hãy đảm bảo sao lưu cơ sở dữ liệu trong phiên đăng nhập hiện tại để có thể khôi phục lại nếu cần thiết.
SQL > create table alan.names_backup as select * from names; Table created.
Du lịch
Ẩm thực
Khám phá
Đi Phượt
Vẻ đẹp Việt Nam
Chuyến đi