Използвайте delete
заедно с join
като това:
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 |
+------+
Това се мащабира до произволен брой таблици, напр.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Това ще изтрие от a
всички записи, които са препратени от тези записи на b
които на свой ред се препращат от c
. Можете също така да добавите клауза WHERE по следния начин:
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';
Ако искате да ограничите броя редове за изтриване, направете следното:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Ако искате да изтриете първите 500 000 реда, трябва да прецизирате кои редове са първи, така че трябва да установите известно подреждане между редовете. С други думи, трябва да сортирате редове по някои критерии и след това да ограничите по този начин:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;