Gunakan delete
bersama dengan join
seperti ini:
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 |
+------+
Skala ini ke jumlah tabel yang berubah-ubah, mis.:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB;
Ini akan menghapus dari a
semua catatan yang dirujuk dari catatan b
yang pada gilirannya dirujuk dari c
. Anda juga dapat menambahkan klausa WHERE seperti ini:
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';
Jika Anda ingin membatasi jumlah baris yang akan dihapus, lakukan seperti ini:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
LIMIT 500000;
Jika Anda ingin menghapus 500.000 baris pertama, Anda perlu menyaring baris mana yang lebih dulu, jadi Anda perlu membuat beberapa pengurutan di antara baris. Dengan kata lain Anda perlu mengurutkan baris berdasarkan beberapa kriteria dan kemudian membatasi seperti ini:
DELETE a
FROM a
JOIN b ON a.idA=b.idA
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;