2013-08-15 31 views
6

Tôi muốn lấy email trùng lặp khỏi bảng:Làm thế nào để tìm thấy email trùng lặp trong một bảng mysql

userid  email 
------------------------- 
1  [email protected] 
2  [email protected] 
3  abc%40gmail.com 
4  [email protected] 
5  abcd%40gmail.com 

Vì vậy, từ hồ sơ trên tôi muốn kết quả như

Email   Count 
------------------------- 
[email protected] 2 
[email protected] 2 
[email protected] 1 

Có ai biết làm thế nào để quản lý mà ?

Cảm ơn.

Trả lời

3

Bạn có thể không trực tiếp làm điều đó trong MySQL vì không có chức năng để urlencode hoặc urldecode chuỗi.

Bạn sẽ phải tạo một Chức năng do người dùng xác định để xử lý quy trình đó. Một khi bạn có chức năng đó chỉ cần đi cho một đơn giản group by với một khoản having.

Link to the required UDFs

Nếu UDFs không phải là một lựa chọn, thực hiện giải pháp duy nhất tôi có thể nghĩ đến là tự thay thế các ký tự (dưới nguy cơ của riêng bạn):

SELECT REPLACE(email, "%40", "@") DuplicateEmail, COUNT(*) Amount 
FROM t 
GROUP BY DuplicateEmail 
ORDER BY Amount desc 

Fiddle here.

Output:

| DUPLICATEEMAIL | AMOUNT | 
--------------------------- 
| [email protected] |  2 | 
| [email protected] |  2 | 
| [email protected] |  1 | 
+0

Không, tôi muốn tìm nạp cả hai bản ghi có chứa @ &% 40 –

+0

Đó không phải là những gì bạn có trong ví dụ của mình ... bạn chỉ hiển thị những bản ghi có @ trong kết quả của bạn. Đầu ra của truy vấn của tôi là những gì bạn đang tìm kiếm trong kết quả mong đợi của bạn. Xin vui lòng, cập nhật câu hỏi của bạn để hiển thị đầu ra bạn đang nói bạn cần. –

11

Nếu bạn muốn xuất dữ liệu chính xác như thể hiện trong câu hỏi của bạn, sử dụng truy vấn này:

SELECT email, COUNT(*) AS count 
FROM table 
GROUP BY email HAVING count > 0 
ORDER BY count DESC; 
+1

Chỉ cần một lưu ý thân thiện cho bất cứ ai gắn cờ này: trong khi đây không phải là câu trả lời ĐÚNG, nó là một câu trả lời - đó là những gì downvotes là dành cho. Gắn cờ "không phải là câu trả lời" là khi ai đó thêm nhận xét (ví dụ: "tôi cũng vậy") làm "câu trả lời". Chúc mừng! –

+0

Ở trên bởi @derhansen là cách tôi de-dupe bảng. Tôi sẽ đôi khi LOWER ('email') trong trường hợp ai đó sử dụng chữ hoa và chữ thường khi nhập địa chỉ của họ. Tôi cũng chỉ hiển thị các bản ghi trùng lặp với số> 1. Hoạt động tốt. – backwardm

Các vấn đề liên quan