Gebruik delete
samen met join
zoals dit:
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 |
+------+
Dit schaalt naar een willekeurig aantal tabellen, bijvoorbeeld:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Dit wordt verwijderd uit a
alle records waarnaar wordt verwezen vanuit die records van b
die op hun beurt worden doorverwezen vanuit c
. U kunt ook de WHERE-clausule als volgt toevoegen:
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';
Als u het aantal te verwijderen rijen wilt beperken, gaat u als volgt te werk:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Als u de eerste 500000 rijen wilt verwijderen, moet u verfijnen welke rijen het eerst zijn, dus u moet een bepaalde volgorde tussen de rijen vaststellen. Met andere woorden, je moet rijen sorteren op een aantal criteria en dan als volgt beperken:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;