Použijte delete
spolu s join
takhle:
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 |
+------+
Toto se změní na libovolný počet tabulek, např.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Toto smaže z a
všechny záznamy, na které se odkazuje z těchto záznamů b
které jsou zase odkazovány z c
. Můžete také přidat klauzuli WHERE takto:
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';
Pokud chcete omezit počet řádků ke smazání, postupujte takto:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Pokud chcete odstranit prvních 500 000 řádků, musíte upřesnit, které řádky jsou první, takže musíte mezi řádky vytvořit nějaké pořadí. Jinými slovy, musíte seřadit řádky podle určitých kritérií a poté omezit takto:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;