Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách chọn tất cả bản ghi trùng lặp trong MySQL

Để tìm các bản ghi trùng lặp dựa trên giá trị của một cột, sử dụng truy vấn con (subquery) với GROUP BY và HAVING COUNT(*) > 1.

Tạo bảng có khóa chính tự động tăng

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.87 sec)

Chèn dữ liệu có trùng lặp

mysql> INSERT INTO DemoTable(Name) VALUES('John');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Chris');
Query OK, 1 row affected (0.21 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('John');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('David');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Mike');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Robert');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(Name) VALUES('Mike');
Query OK, 1 row affected (0.12 sec)

Truy vấn chọn tất cả bản ghi trùng lặp

mysql> SELECT * FROM DemoTable
    -> WHERE Name IN (
    ->   SELECT Name FROM DemoTable
    ->   GROUP BY Name
    ->   HAVING COUNT(*) > 1
    -> );

Kết quả (hiển thị cả các bản ghi John, Chris, Mike xuất hiện nhiều lần):

+----+-------+
| Id | Name  |
+----+-------+
| 1  | John  |
| 2  | Chris |
| 3  | John  |
| 6  | Chris |
| 7  | Mike  |
| 9  | Mike  |
+----+-------+
6 rows in set (0.09 sec)

Lưu ý: Truy vấn này trả về tất cả các bản ghi thuộc nhóm trùng lặp, không chỉ các bản ghi thừa.