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).