Devdit
 

MySQL ลบข้อมูลซ้ำจากตาราง ด้วย Subquery

4.6K

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)

แก้ไข 2 ปีที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ