MySQL ลบข้อมูลซ้ำจากตาราง ด้วย Subquery บทความนี้สอนเขียนคำสั่ง SQL เพื่อลบข้อมูลที่ซ้ำออกทั้งหมด เช่น มี row B ซ้ำ 2 rows ก็ลบออกทั้ง 2 rows โดยใช้การเขียน SQL แบบ Subquery สามารถเขียนคำสั่งได้ดังนี้
ตัวอย่าง ข้อมูลภายในตาราง test ต้องการลบข้อมูล B ที่ซ้ำกันออก คือ id = 2 และ 7
+----+------+
| id | name |
+----+------+
| 1 | AAA |
| 2 | B |
| 3 | C |
| 4 | D |
| 5 | E |
| 7 | B |
+----+------+
ตัวอย่าง MySQL ลบข้อมูลซ้ำจากตาราง ด้วย Subquery
DELETE FROM test WHERE ( name IN( SELECT name FROM test GROUP BY name HAVING COUNT(name) > 1 ))
ผลลัพธ์
+----+------+
| id | name |
+----+------+
| 1 | AAA |
| 3 | C |
| 4 | D |
| 5 | E |
+----+------+
MySQL ลบข้อมูลซ้ำจากตาราง ด้วย Subquery จากตัวอย่างสามารถอธิบายการเขียนคำสั่ง SQL ได้ดังนี้
1. DELETE FROM test คือ ลบข้อมูลจากตาราง test
2. WHERE ( name IN คือ เงื่อนไขคือ ลบข้อมูลที่ column name มีค่าเท่ากับ ผลลัพธ์ของ Subquery ในวงเล็บ
3. SELECT name FROM test GROUP BY name HAVING COUNT(name) > 1 คือ Subquery แสดงข้อมูลจากตาราง test โดยรวมข้อมูลที่ซ้ำของ column name เข้าด้วยกัน ด้วย GROUP BY name และแสดงเฉพาะข้อมูลที่ซ้ำด้วย HAVING COUNT(name) > 1 (กรณีไม่ซ้ำข้อมูลจะมีค่าเท่ากับ 1 เพราะมี 1 row)