Chúng ta thường cần tìm và xóa các hàng trùng lặp khỏi bảng oracle do nhiều nguyên nhân trong cơ sở dữ liệu. Chúng tôi cần xóa để xóa các vấn đề dữ liệu thường xuyên. Có nhiều cách để oracle xóa các hàng trùng lặp nhưng vẫn giữ nguyên bản gốc. Tôi sẽ giới thiệu một số phương pháp nhanh hơn để đạt được nó trong bài đăng này. Tôi sẽ chỉ ra phương thức mà rowid được sử dụng và phương thức mà rowid không được sử dụng. Xin lưu ý rằng bạn phải xác định tất cả các cột làm cho hàng trùng lặp trong bảng và chỉ định tất cả các cột đó trong câu lệnh xóa thích hợp trong SQL
Cách xóa các hàng trùng lặp khỏi Oracle
Dưới đây là một số cách để xóa các hàng trùng lặp một cách dễ dàng
(A) Phương pháp nhanh nhưng bạn cần tạo lại tất cả các chỉ mục tiên tri, các trình kích hoạt
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
Ví dụ
SQL> select * from mytest;ID NAME
------1 TST
2 TST
1 TST
SQL> create table mytest1 as select distinct * from mytest; Table created. SQL> select * from mytest1;ID NAME
-------2 TST
1 TST
SQL> drop table mytest; Table dropped. SQL> rename mytest1 to mytest; Table renamed. SQL> select * from mytest;ID NAME
-------2 TST
1 TST
(B) Cách tìm và xóa các bản ghi trùng lặp trong oracle bằng cách sử dụng rowid. Ví dụ dưới đây hiển thị một cột. Nếu bạn đã xóa dựa trên hai cột, bạn có thể chỉ định hai cột
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C) Sử dụng tự nối oracle để xóa các hàng trùng lặp
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D) Điều khoản sử dụng tồn tại
delete from my_table t1 where exists (select 'x' from my_table t2 where t2.key_value1 = t1.key_value1 and t2.key_value2 = t1.key_value2 and t2.rowid > t1.rowid);
(E) xóa các bản ghi trùng lặp bằng cách sử dụng các chức năng phân tích tiên tri
delete from my_table where rowid in (select rid from ( select rowid rid, row_number() over (partition by column_name order by rowid) rn from my_table) where rn <> 1 )
Vì vậy, như được hiển thị, có nhiều cách để xóa các hàng trùng lặp trong bảng, lệnh này có thể hữu ích trong nhiều trường hợp và có thể được sử dụng tùy theo yêu cầu. Hãy luôn đảm bảo rằng chúng tôi có sẵn bản sao lưu trước khi thực hiện bất kỳ câu lệnh nào. Trước tiên, chúng tôi cũng nên tìm bản sao bằng cách sử dụng truy vấn và sau đó xác minh nó trước khi cam kết
cách tìm bản ghi trùng lặp trong oracle bằng rowid
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
Vì vậy, trước tiên hãy tìm bản sao bằng cách sử dụng truy vấn trên, sau đó xóa nó và số lần xóa phải giống như số hàng của truy vấn ở trên. Bây giờ hãy chạy lại truy vấn tìm bản sao.
Vui lòng xem bài viết dưới đây để tìm hiểu sâu hơn về Sql
Hướng dẫn Oracle Sql:Chứa danh sách tất cả các bài viết hữu ích về Oracle sql. Khám phá chúng để tìm hiểu về Oracle Sql ngay cả khi bạn biết Oracle Sql
Các câu hỏi phỏng vấn Oracle:Xem trang này để biết Top 49 câu hỏi và câu trả lời Phỏng vấn Oracle:Khái niệm cơ bản, Oracle SQL để giúp bạn trong các cuộc phỏng vấn. Tài liệu bổ sung cũng được cung cấp
mệnh đề where trong oracle:Hạn chế tập dữ liệu, mệnh đề where, mệnh đề where là gì trong câu lệnh sql, các hàm hàng đơn
của toán tử so sánh trong Oracle:Kiểm tra điều này để tìm hiểu các hàm hàng đơn trong dữ liệu sql, Oracle hàm, Hàm số trong sql, Hàm ký tự trong sql
truy vấn sql oracle
blog.oracle.com