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

Tìm và hiển thị bản ghi trùng lặp trong MySQL

Sử dụng truy vấn con với GROUP BY ... HAVING COUNT(*) > 1 để tìm giá trị trùng lặp, sau đó lấy toàn bộ hàng chứa giá trị đó.

Dữ liệu mẫu

mysql> CREATE TABLE DuplicateFound (ID INT, Name VARCHAR(100), Location VARCHAR(200));
mysql> INSERT INTO DuplicateFound VALUES
(1,'John','US'), (2,'Bob','UK'), (3,'David','US'), (4,'Smith','US'), (5,'Carol','UK');

mysql> SELECT * FROM DuplicateFound;
+------+-------+----------+
| ID   | Name  | Location |
+------+-------+----------+
| 1    | John  | US       |
| 2    | Bob   | UK       |
| 3    | David | US       |
| 4    | Smith | US       |
| 5    | Carol | UK       |
+------+-------+----------+

1. Hiển thị tất cả hàng có Location trùng lặp

SELECT * FROM DuplicateFound
WHERE Location IN (
    SELECT Location FROM DuplicateFound
    GROUP BY Location HAVING COUNT(Location) > 1
)
ORDER BY Location;
+------+-------+----------+
| ID   | Name  | Location |
+------+-------+----------+
| 2    | Bob   | UK       |
| 5    | Carol | UK       |
| 1    | John  | US       |
| 3    | David | US       |
| 4    | Smith | US       |
+------+-------+----------+

2. Chỉ hiển thị một đại diện cho mỗi nhóm trùng lặp

SELECT Name, Location FROM DuplicateFound
GROUP BY Location HAVING COUNT(Location) > 1;
+------+----------+
| Name | Location |
+------+----------+
| John | US       |
| Bob  | UK       |
+------+----------+

Mỗi location trùng lặp chỉ hiện 1 hàng (hàng đầu tiên trong nhóm do MySQL cho phép chọn cột không có trong GROUP BY).