Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để loại bỏ các bản ghi trùng lặp ngoại trừ một bản ghi duy nhất trong MySQL?

Bạn có thể sử dụng lệnh DELETE với một số điều kiện cho việc này vì chúng tôi cần giữ một bản ghi và xóa phần còn lại của các bản ghi trùng lặp.

Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable
(
   StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   StudentName varchar(40)
);
Query OK, 0 rows affected (0.48 sec)

Chèn bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable(StudentName) values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(StudentName) values('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(StudentName) values('Sam');
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable(StudentName) values('Carol');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(StudentName) values('David');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(StudentName) values('Carol');
Query OK, 1 row affected (0.26 sec)

Hiển thị các bản ghi từ bảng bằng lệnh select -

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau -

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Sam         |
| 4         | Carol       |
| 5         | David       |
| 6         | Carol       |
+-----------+-------------+
6 rows in set (0.00 sec)

Đây là truy vấn để loại bỏ các bản ghi trùng lặp ngoại trừ một bản ghi duy nhất -

mysql> delete tbl1 from DemoTable tbl1,DemoTable tbl2
WHERE
tbl1.StudentName = tbl2.StudentName AND tbl1.StudentId > tbl2.StudentId;
Query OK, 2 rows affected (0.79 sec)

Truy vấn trên đã xóa 2 hàng cho “Carol” và để lại một trong các bản ghi “Carol”.

Bây giờ chúng ta hãy hiển thị các bản ghi của bảng -

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau -

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1         | John        |
| 2         | Carol       |
| 3         | Sam         |
| 5         | David       |
+-----------+-------------+
4 rows in set (0.00 sec)