Verwenden Sie delete
zusammen mit join
so:
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 |
+------+
Dies skaliert auf eine beliebige Anzahl von Tabellen, z. B.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Dadurch wird a
gelöscht alle Datensätze, auf die von diesen Datensätzen von b
verwiesen wird die wiederum von c
referenziert werden . Sie können auch eine WHERE-Klausel wie diese hinzufügen:
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';
Wenn Sie die Anzahl der zu löschenden Zeilen begrenzen möchten, gehen Sie folgendermaßen vor:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Wenn Sie die ersten 500000 Zeilen löschen möchten, müssen Sie verfeinern, welche Zeilen zuerst sind, also müssen Sie eine gewisse Reihenfolge zwischen den Zeilen festlegen. Mit anderen Worten, Sie müssen Zeilen nach bestimmten Kriterien sortieren und dann wie folgt einschränken:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;