Använd delete
tillsammans med join
så här:
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 |
+------+
Detta skalas till godtyckligt antal tabeller, t.ex.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Detta kommer att raderas från a
alla poster som hänvisas från dessa poster i b
som i sin tur refereras från c
. Du kan också lägga till WHERE-sats så här:
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';
Om du vill begränsa antalet rader som ska raderas, gör så här:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Om du vill ta bort de första 500 000 raderna måste du förfina vilka rader som är först, så du måste skapa en viss ordning bland raderna. Med andra ord måste du sortera rader efter vissa kriterier och sedan begränsa så här:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;