Tùy thuộc vào tập kết quả bạn muốn tạo, có ít nhất hai loại truy vấn SQL mà bạn có thể sử dụng để tìm các giá trị trùng lặp trong bảng cơ sở dữ liệu của mình
- Tạo tất cả các hàng có một cột có giá trị trùng lặp
- Tìm xem có bao nhiêu hàng có một cột có giá trị trùng lặp
Hướng dẫn này sẽ giúp bạn tìm hiểu cách viết các truy vấn tạo ra tập kết quả phù hợp
Ví dụ: giả sử bạn có bảng members
với dữ liệu sau. Lưu ý rằng các hàng được đánh dấu là các hàng duy nhất trong bảng
+----+------------+----------------+
| id | first_name | country |
+----+------------+----------------+
| 1 | Jackson | United States |
| 2 | Sarah | Canada |
| 3 | Akihiko | Japan |
| 4 | Matt | United Kingdom |
| 5 | Peter | Canada |
| 6 | Yuko | Japan |
| 7 | Devon | United States |
| 8 | Sasuke | Japan |
| 9 | Nicky | Netherlands |
+----+------------+----------------+
Bên cạnh hàng thứ tư và thứ chín, tất cả các hàng khác đều có giá trị country
trùng lặp trong bảng
Hãy bắt đầu với việc tạo tất cả các hàng có một cột có giá trị trùng lặp
Tạo tất cả các hàng có một cột có giá trị trùng lặp
Có hai phương pháp bạn có thể sử dụng để tạo tất cả các hàng có một cột có giá trị trùng lặp
- Sử dụng truy vấn con
0SELECT country FROM members GROUP BY country HAVING COUNT[country] > 1
- Sử dụng truy vấn con
1SELECT country FROM members GROUP BY country HAVING COUNT[country] > 1
Cả hai phương pháp trên đều yêu cầu bạn viết truy vấn con chỉ trả về giá trị country
đã xuất hiện nhiều lần
Truy vấn con sẽ là một câu lệnh
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
3 với mệnh đề SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
4 và SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
5 như sauSELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
Tập kết quả của truy vấn trên sẽ như hình bên dưới
+---------------+
| country |
+---------------+
| United States |
| Canada |
| Japan |
+---------------+
Sử dụng mệnh đề
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
0, bạn có thể viết một câu lệnh SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
3 nối với một bảng tạm thời được tạo từ một truy vấn như sauSELECT id, first_name, members.country
FROM members
INNER JOIN[
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country]>1
] AS temp_tbl WHERE members.country = temp_tbl.country;
Truy vấn trên sẽ tạo ra tập kết quả sau
+----+------------+---------------+
| id | first_name | country |
+----+------------+---------------+
| 1 | Jackson | United States |
| 2 | Sarah | Canada |
| 3 | Akihiko | Japan |
| 5 | Peter | Canada |
| 6 | Yuko | Japan |
| 7 | Devon | United States |
| 8 | Sasuke | Japan |
+----+------------+---------------+
Như bạn có thể thấy, tất cả các hàng trùng lặp được hiển thị trong tập hợp kết quả ở trên
Ngoài việc sử dụng mệnh đề
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
0, bạn cũng có thể sử dụng mệnh đề SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
1 để tạo ra kết quả tương tự như sauSELECT id, first_name, country
FROM members
WHERE country IN [
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
];
Mệnh đề
SELECT country
FROM members
GROUP BY country
HAVING COUNT[country] > 1
1 sẽ lọc các hàng, khiến MySQL chỉ hiển thị các hàng có giá trị cột country
khớp với một giá trị bên trong mệnh đề +---------------+
| country |
+---------------+
| United States |
| Canada |
| Japan |
+---------------+
2Tìm xem có bao nhiêu hàng có một cột có giá trị trùng lặp
Bạn cũng có thể biết có bao nhiêu hàng trong bảng của mình có một trường có giá trị trùng lặp
Truy vấn sau đây sẽ hiển thị cột country
cùng với số lần cột country
xuất hiện trong bảng
SELECT country, COUNT[ country ] total_members
FROM members
GROUP BY country
HAVING total_members > 1;
Đầu ra sẽ được như hình dưới đây
+---------------+---------------+
| country | total_members |
+---------------+---------------+
| United States | 2 |
| Canada | 2 |
| Japan | 3 |
+---------------+---------------+
Và đó là cách bạn có thể tìm các giá trị trùng lặp trong bảng MySQL của mình
Bạn có thể cần sao chép và điều chỉnh các truy vấn ví dụ ở trên để tạo ra kết quả phù hợp từ máy chủ cơ sở dữ liệu của mình