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

Xóa các hàng trùng lặp trong MySQL (Bỏ qua khóa chính)

Ví dụ sau đây xóa các hàng trùng lặp trong MySQL trong khi bỏ qua khóa chính hoặc cột định danh duy nhất.

Ví dụ xóa các hàng trùng lặp nhưng giữ lại một hàng. Vì vậy, trong trường hợp hai hàng giống nhau, nó sẽ xóa một trong số chúng và giữ lại hàng kia.

Dữ liệu mẫu

Giả sử chúng ta có một bảng với dữ liệu sau:

SELECT * FROM Dogs;

Kết quả:

+---------+-------------+------------+
| DogId   | FirstName   | LastName   |
|---------+-------------+------------|
| 1       | Bark        | Smith      |
| 2       | Bark        | Smith      |
| 3       | Woof        | Jones      |
| 4       | Ruff        | Robinson   |
| 5       | Wag         | Johnson    |
| 6       | Wag         | Johnson    |
| 7       | Wag         | Johnson    |
+---------+-------------+------------+

Chúng ta có thể thấy rằng hai hàng đầu tiên là trùng lặp và ba hàng cuối cùng là trùng lặp.

Tìm bản sao

Trước tiên, hãy chọn kiểm tra bảng của chúng tôi để xem có bao nhiêu hàng trùng lặp:

SELECT 
    FirstName, 
    LastName, 
    COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;

Kết quả:

+-----------+----------+-------+
| FirstName | LastName | Count |
+-----------+----------+-------+
| Bark      | Smith    |     2 |
| Wag       | Johnson  |     3 |
+-----------+----------+-------+

Chúng ta có thể thấy rằng có hai hàng với Bark Smith và ba hàng với Wag Johnson.

Chúng tôi sẽ tách bảng để nó chỉ chứa một trong số mỗi bảng.

Xóa các bản sao

Chạy đoạn mã sau để xóa bảng trên:

DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
    d1.DogId < d2.DogId AND
    d1.FirstName = d2.FirstName AND
    d1.LastName = d2.LastName;

Kết quả:

Query OK, 3 rows affected (0.00 sec)

Hãy xem kết quả:

SELECT * FROM Dogs;

Kết quả:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     2 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

Chúng tôi đã xóa thành công các hàng trùng lặp khỏi bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc KIỂM TRA trong MySQL không hoạt động

  2. Các câu lệnh chuẩn bị sẵn trong PHP PDO

  3. mysql tự động lưu trữ dấu thời gian tạo bản ghi

  4. Sự khác biệt giữa =null và IS NULL là gì?

  5. mysql_num_rows () mong đợi tham số 1 là tài nguyên, boolean được đưa vào