sql >> Databasteknik >  >> RDS >> Mysql

Mysql radera i en tabell med id från en annan tabell

Använd delete tillsammans med join så här:

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

Detta skalas till godtyckligt antal tabeller, t.ex.:

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

Detta kommer att raderas från a alla poster som hänvisas från dessa poster i b som i sin tur refereras från c . Du kan också lägga till WHERE-sats så här:

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

Om du vill begränsa antalet rader som ska raderas, gör så här:

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

Om du vill ta bort de första 500 000 raderna måste du förfina vilka rader som är först, så du måste skapa en viss ordning bland raderna. Med andra ord måste du sortera rader efter vissa kriterier och sedan begränsa så här:

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. Få resultat från mina egna och vänners inlägg

  2. Fel:PLS-00428:en into-sats förväntas i denna select-sats

  3. Solr Numeric Overflow

  4. Oracle Stored Procedure inout parameter problem - Fick lösningen - Skrivfel