Vấn đề: Xóa nhiều hàng theo danh sách ID
Cần xóa các hàng có StudentId là 1, 2, 3, 4 trong một câu lệnh.
Giải pháp: DELETE với mệnh đề IN()
Cú pháp: DELETE FROM table WHERE column IN (value1, value2, ...);
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(20)
);
INSERT INTO DemoTable (StudentName) VALUES
('Chris'), ('Robert'), ('David'), ('Mike');
2. Dữ liệu trước khi xóa
+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | Chris |
| 2 | Robert |
| 3 | David |
| 4 | Mike |
+-----------+-------------+
3. Xóa hàng ID 1,2,3,4
DELETE FROM DemoTable WHERE StudentId IN (1, 2, 3, 4);
4. Kết quả: Bảng trống
Empty set (0.00 sec)
Lưu ý
IN()chấp nhận danh sách giá trị, subquery, hoặc biểu thức.- Với danh sách lớn (>1000 giá trị), cân nhắc dùng bảng tạm hoặc
JOINđể tránh giới hạn độ dài câu lệnh. - Luôn kiểm tra bằng
SELECT * FROM table WHERE id IN (...)trước khi xóa. - Sử dụng transaction:
START TRANSACTION; DELETE ...; COMMIT;(hoặc ROLLBACK nếu sai).
Mở rộng: Xóa dựa trên subquery
DELETE FROM DemoTable
WHERE StudentId IN (SELECT Id FROM AnotherTable WHERE Condition);