Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีลบข้อมูลซ้ำ (Duplicate Records) ในตาราง MySQL

ใช้คำสั่ง DELETE ร่วมกับเงื่อนไขเพื่อลบข้อมูลซ้ำ มาดูตัวอย่าง

สร้างตารางและเพิ่มข้อมูลซ้ำ

mysql> CREATE TABLE DuplicateDeleteDemo (
    -> id INT,
    -> name VARCHAR(100)
    -> );

mysql> INSERT INTO DuplicateDeleteDemo VALUES (1, 'John');
mysql> INSERT INTO DuplicateDeleteDemo VALUES (1, 'John');  -- ซ้ำ
mysql> INSERT INTO DuplicateDeleteDemo VALUES (2, 'Johnson');
mysql> INSERT INTO DuplicateDeleteDemo VALUES (1, 'John');  -- ซ้ำอีก

ข้อมูลก่อนลบ:

+------+---------+
| id   | name    |
+------+---------+
| 1    | John    |
| 1    | John    |
| 2    | Johnson |
| 1    | John    |
+------+---------+

ลบข้อมูลซ้ำ (ลบทั้งหมดที่ id=1)

mysql> DELETE FROM DuplicateDeleteDemo WHERE id = 1;
Query OK, 3 rows affected (0.19 sec)

ข้อมูลหลังลบ:

+------+---------+
| id   | name    |
+------+---------+
| 2    | Johnson |
+------+---------+
วิธีที่ดีกว่า (เก็บค่าเดียวไว้): ใช้ ROW_NUMBER() หรือ DELETE ... JOIN เพื่อลบเฉพาะแถวซ้ำ แต่เก็บแถวแรกไว้
-- MySQL 8.0+
DELETE t1 FROM DuplicateDeleteDemo t1
JOIN (
  SELECT MIN(id) as keep_id, name 
  FROM DuplicateDeleteDemo 
  GROUP BY name 
  HAVING COUNT(*) > 1
) t2 ON t1.name = t2.name AND t1.id > t2.keep_id;