sql >> Database >  >> RDS >> Mysql

Mysql verwijderen in een tabel door id's uit een andere tabel

Gebruik delete samen met join zoals dit:

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

Dit schaalt naar een willekeurig aantal tabellen, bijvoorbeeld:

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

Dit wordt verwijderd uit a alle records waarnaar wordt verwezen vanuit die records van b die op hun beurt worden doorverwezen vanuit c . U kunt ook de WHERE-clausule als volgt toevoegen:

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

Als u het aantal te verwijderen rijen wilt beperken, gaat u als volgt te werk:

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

Als u de eerste 500000 rijen wilt verwijderen, moet u verfijnen welke rijen het eerst zijn, dus u moet een bepaalde volgorde tussen de rijen vaststellen. Met andere woorden, je moet rijen sorteren op een aantal criteria en dan als volgt beperken:

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. Een specifieke waarde opvragen met draaitabel mySQL

  2. Hoe Atan2d() werkt in PostgreSQL

  3. MySQL - met GROUP BY en DESC

  4. SQL-query voor paginering met meerdere kolommen; OR-operator begrijpen