Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql elimina in una tabella per ID da un'altra tabella

Usa delete insieme a join così:

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 |
+------+

Questo viene ridimensionato a un numero arbitrario di tabelle, ad esempio:

DELETE a 
FROM a 
JOIN b ON a.idA=b.idA 
JOIN c ON b.idB=c.idB;

Questo cancellerà da a tutti i record a cui si fa riferimento da quei record di b che sono a loro volta richiamati da c . Puoi anche aggiungere la clausola WHERE in questo modo:

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';

Se vuoi limitare il numero di righe da eliminare, procedi in questo modo:

DELETE a 
FROM a 
JOIN b ON a.idA=b.idA 
JOIN c ON b.idB=c.idB
LIMIT 500000;

Se vuoi eliminare le prime 500000 righe, devi perfezionare quali righe sono le prime, quindi devi stabilire un ordine tra le righe. In altre parole, devi ordinare le righe in base ad alcuni criteri e quindi limitare in questo modo:

DELETE a 
FROM a 
JOIN b ON a.idA=b.idA 
JOIN c ON b.idB=c.idB
ORDER BY a.something
LIMIT 500000;