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

ลบทุกแถวยกเว้นบางแถวใน MySQL ด้วย NOT IN

DELETE ทุกแถวยกเว้นที่ระบุ (Keep Specific Rows)

ใช้ DELETE ... WHERE column NOT IN (values_to_keep)

ไวยากรณ์

DELETE FROM yourTable WHERE yourColumn NOT IN ('keep1', 'keep2', 'keep3');

ตัวอย่าง

CREATE TABLE deleteAllRowsWithCondition (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20)
);

INSERT INTO deleteAllRowsWithCondition(Name) VALUES
('Larry'), ('John'), ('Sam'), ('Mike'), ('Carol'), ('Bob'), ('David');

ก่อน Delete

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Larry |
| 2  | John  |
| 3  | Sam   |
| 4  | Mike  |
| 5  | Carol |
| 6  | Bob   |
| 7  | David |
+----+-------+

ลบยกเว้น John, Mike, Carol

DELETE FROM deleteAllRowsWithCondition 
WHERE Name NOT IN ('John', 'Mike', 'Carol');

หลัง Delete

+----+-------+
| Id | Name  |
+----+-------+
| 2  | John  |
| 4  | Mike  |
| 5  | Carol |
+----+-------+

ข้อควรระวัง

  • NOT IN กับ NULL: ถ้า Subquery คืน NULL → ผลลัพธ์ว่างทั้งหมด (ใช้ NOT EXISTS แทน)
  • Backup ก่อน Delete จำนวนมาก
  • ใช้ Transaction: START TRANSACTION; DELETE ...; COMMIT;
  • Foreign Key: ต้องลบ Child Table ก่อน หรือ ON DELETE CASCADE

ทางเลือก: NOT EXISTS

DELETE FROM table_A 
WHERE NOT EXISTS (SELECT 1 FROM table_B WHERE table_B.id = table_A.id);

ปลอดภัยกว่า NOT IN เมื่อมี NULL