Brug delete
sammen med join
sådan her:
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 |
+------+
Dette skaleres til et vilkårligt antal tabeller, f.eks.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Dette vil slette fra a
alle poster, der er henvist fra disse poster i b
som igen henvises til c
. Du kan også tilføje WHERE-sætning som denne:
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';
Hvis du vil begrænse antallet af rækker, der skal slettes, gør du sådan her:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Hvis du vil slette de første 500.000 rækker, skal du forfine hvilke rækker der er først, så du skal etablere en vis rækkefølge blandt rækkerne. Med andre ord skal du sortere rækker efter nogle kriterier og derefter begrænse sådan:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;