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

Mysql sletning i en tabel ved id'er fra en anden tabel

Brug delete sammen med join sådan her:

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

Dette skaleres til et vilkårligt antal tabeller, f.eks.:

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

Dette vil slette fra a alle poster, der er henvist fra disse poster i b som igen henvises til c . Du kan også tilføje WHERE-sætning som denne:

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

Hvis du vil begrænse antallet af rækker, der skal slettes, gør du sådan her:

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

Hvis du vil slette de første 500.000 rækker, skal du forfine hvilke rækker der er først, så du skal etablere en vis rækkefølge blandt rækkerne. Med andre ord skal du sortere rækker efter nogle kriterier og derefter begrænse sådan:

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


  1. GreenDAO understøtter flere relationer mellem tabeller

  2. Mac installer og åbn mysql ved hjælp af terminal

  3. Hvordan kan jeg med Rails forespørge i db'en for et samlet antal og grupperet efter uge?

  4. T-sql, ticks, tidsstempel