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

การลบคอลัมน์ซ้ำ (Duplicate Rows) ใน MySQL ด้วย DELETE JOIN

การลบแถวซ้ำ (Duplicate Rows) ด้วย Self-JOIN

ใช้ DELETE กับ INNER JOIN ตารางตัวเอง (Self-Join) เปรียบเทียบ Primary Key เพื่อเก็บแถวใดแถวหนึ่ง

คำสั่ง

DELETE tbl1 
FROM demo14 tbl1
INNER JOIN demo14 tbl2 
WHERE tbl1.id < tbl2.id 
  AND tbl1.name = tbl2.name;

ตัวอย่างข้อมูลก่อนลบ

idname
1John
2David
3David
4Bob
5John
6Carol

ผลลัพธ์หลังลบ

idname
3David
4Bob
5John
6Carol

ตรรกะ: tbl1.id < tbl2.id หมายถึง ลบแถวที่ ID น้อยกว่า (เก่ากว่า) ทิ้ง ไปเก็บแถว ID มากกว่า (ใหม่กว่า)

วิธีอื่น:

  • MySQL 8.0+: DELETE FROM demo14 WHERE id NOT IN (SELECT MAX(id) FROM demo14 GROUP BY name)
  • สร้าง Unique Index ชั่วคราว แล้ว INSERT IGNORE ... SELECT DISTINCT เข้าตารางใหม่