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

Tìm hàng có giá trị cột trùng lặp (xuất hiện >1 lần) trong MySQL

Sử dụng self-join (JOIN bảng với chính nó) để tìm các hàng có giá trị cột xuất hiện nhiều hơn 1 lần.

Ví dụ

Tạo bảng UserName có trùng 'Larry':

mysql> create table DemoTable ( 
    UserId int, 
    UserName varchar(20) 
); 
Query OK, 0 rows affected (0.54 sec)

Dữ liệu: John(10), Sam(11), Larry(12), David(13), Larry(14)

Truy vấn self-join

mysql> SELECT DISTINCT tbl1.* FROM DemoTable tbl1 
    JOIN DemoTable tbl2 
    ON tbl2.UserId <> tbl1.UserId AND tbl2.UserName = tbl1.UserName;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 14     | Larry    |
| 12     | Larry    |
+--------+----------+

Giải thích: Join điều kiện UserId khác nhau VÀ UserName giống nhau tìm ra các cặp bản ghi trùng tên. DISTINCT loại bỏ kết quả trùng lặp từ join.

Cách hiệu quả hơn (aggregation):

SELECT UserName, COUNT(*) as cnt FROM DemoTable GROUP BY UserName HAVING COUNT(*) > 1;

Trả về tên và số lần xuất hiện. Dùng IN hoặc JOIN lại bảng gốc để lấy chi tiết.