delete
を使用する join
と一緒に このように:
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 |
+------+
これは、任意の数のテーブルにスケーリングされます。例:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
これにより、a
から削除されます b
のレコードから参照されるすべてのレコード これらはc
から参照されます 。次のようにWHERE句を追加することもできます:
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';
削除する行数を制限する場合は、次のようにします。
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
最初の500000行を削除する場合は、最初の行を調整する必要があるため、行間の順序を確立する必要があります。つまり、いくつかの基準で行を並べ替えてから、次のように制限する必要があります。
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;