Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xóa tất cả các hàng trùng lặp ngoại trừ một hàng trong MySQL?

Cảnh báo của trình chỉnh sửa:Giải pháp này không hiệu quả về mặt tính toán và có thể làm hỏng kết nối của bạn cho một bảng lớn.

NB - Bạn cần để thực hiện việc này trước tiên trên bản sao thử nghiệm trên bàn của bạn!

Khi tôi làm điều đó, tôi thấy rằng trừ khi tôi cũng bao gồm AND n1.id <> n2.id , nó đã xóa mọi hàng trong bảng.

  1. Nếu bạn muốn giữ hàng có id thấp nhất giá trị:

    DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
    
  2. Nếu bạn muốn giữ hàng có id cao nhất giá trị:

    DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
    

Tôi đã sử dụng phương pháp này trong MySQL 5.1

Không chắc chắn về các phiên bản khác.

Cập nhật:Vì mọi người trên Google để xóa các bản sao đều kết thúc ở đây
Mặc dù câu hỏi của OP là về DELETE , xin lưu ý rằng sử dụng INSERTDISTINCT nhanh hơn nhiều. Đối với cơ sở dữ liệu có 8 triệu hàng, truy vấn dưới đây mất 13 phút trong khi sử dụng DELETE , mất hơn 2 giờ mà vẫn chưa hoàn thành.

INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
    SELECT DISTINCT cellId,attributeId,entityRowId,value
    FROM tableName;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truyền từ VARCHAR sang INT - MySQL

  2. Plugin xác thực 'caching_sha2_password' không được hỗ trợ

  3. Làm cách nào tôi có thể sử dụng thực thi để chèn vào MySQL một danh sách các từ điển bằng Python

  4. MySQL Fire Trigger cho cả Chèn và Cập nhật

  5. Cách chuyển tất cả cơ sở dữ liệu MySQL từ máy chủ cũ sang máy chủ mới