Sử dụng delete
cùng với join
như thế này:
mysql> create table a (id int);
mysql> insert into a values (1), (2), (3), (4);
mysql> create table b (id int);
mysql> insert into b values (2), (3);
mysql> delete a from a join b on a.id=b.id where b.id > 2;
mysql> select * from a;
+------+
| id |
+------+
| 1 |
| 2 |
| 4 |
+------+
Điều này chia tỷ lệ thành số lượng bảng tùy ý, ví dụ:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Thao tác này sẽ xóa khỏi a
tất cả các bản ghi được tham chiếu từ các bản ghi đó của b
lần lượt được giới thiệu từ c
. Bạn cũng có thể thêm mệnh đề WHERE như sau:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
WHERE a.status='done' AND
b.status='open' AND
c.status='open';
Nếu bạn muốn giới hạn số hàng bị xóa, hãy làm như sau:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Nếu bạn muốn xóa 500000 hàng đầu tiên, bạn cần phải tinh chỉnh hàng nào trước, vì vậy bạn cần thiết lập một số thứ tự giữa các hàng. Nói cách khác, bạn cần sắp xếp các hàng theo một số tiêu chí và sau đó giới hạn như sau:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;