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

ลบข้อมูลหลายแถวใน MySQL ด้วย JOIN (Delete Multiple Entries)

การ DELETE หลายแถวพร้อมกันด้วย Self-JOIN

ใช้ DELETE ... FROM table JOIN table alias ON condition เพื่อลบแถวที่ตรงเงื่อนไขการ Join (มักใช้ลบ Duplicates หรือข้อมูลที่เกี่ยวข้อง)

Syntax

DELETE t1 
FROM table_name t1
JOIN table_name t2 ON t1.column = t2.column
WHERE t2.column = 'value';

ตัวอย่าง: ลบแถวที่ FirstName = 'Bob' ทั้งหมด

สร้างตารางและเพิ่มข้อมูล (มี Bob 3 คน):

mysql> CREATE TABLE DemoTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(100));
Query OK, 0 rows affected (0.69 sec)

mysql> INSERT INTO DemoTable (FirstName) VALUES 
    ('Chris'), ('Bob'), ('Mike'), ('Adam'), ('Bob'), ('Adam'), ('Bob'), ('Mike');
Query OK, 8 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable;
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 2  | Bob       |
| 3  | Mike      |
| 4  | Adam      |
| 5  | Bob       |
| 6  | Adam      |
| 7  | Bob       |
| 8  | Mike      |
+----+-----------+
8 rows in set (0.00 sec)

ลบแถวที่ FirstName = 'Bob' ด้วย Self-JOIN:

mysql> DELETE DemoTable 
FROM DemoTable 
JOIN DemoTable tbl ON DemoTable.FirstName = tbl.FirstName 
WHERE tbl.FirstName = 'Bob';
Query OK, 3 rows affected (0.15 sec)

ผลลัพธ์ - Bob ถูกลบทั้ง 3 แถว:

mysql> SELECT * FROM DemoTable;
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | Chris     |
| 3  | Mike      |
| 4  | Adam      |
| 6  | Adam      |
| 8  | Mike      |
+----+-----------+
5 rows in set (0.00 sec)

วิธีอื่นที่ง่ายกว่า (สำหรับกรณีนี้)

-- ลบโดยตรงด้วย WHERE (ไม่ต้อง JOIN)
DELETE FROM DemoTable WHERE FirstName = 'Bob';

เมื่อไหร่ควรใช้ JOIN DELETE

  • ลบข้อมูลในตาราง A ตามเงื่อนไขในตาราง B (Cross-table Delete)
  • ลบ Duplicates โดยเก็บแถวแรก/สุดท้าย (Complex)
  • Cascade Delete แบบ Manual (ถ้าไม่ใช้ FK CASCADE)

ตัวอย่าง Cross-table Delete

DELETE orders 
FROM orders 
JOIN customers ON orders.customer_id = customers.id 
WHERE customers.status = 'banned';