Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Mysql usuń w jednej tabeli według identyfikatora z innej tabeli

Użyj delete razem z join tak:

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

Skaluje się do dowolnej liczby tabel, np.:

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

Spowoduje to usunięcie z a wszystkie rekordy, do których odwołuje się te rekordy b które z kolei są przywoływane z c . Możesz również dodać klauzulę WHERE w następujący sposób:

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

Jeśli chcesz ograniczyć liczbę wierszy do usunięcia, zrób tak:

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

Jeśli chcesz usunąć pierwsze 500000 wierszy, musisz doprecyzować, które wiersze są pierwsze, więc musisz ustalić kolejność między wierszami. Innymi słowy, musisz posortować wiersze według pewnych kryteriów, a następnie ograniczyć w ten sposób:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Baza danych mySQL:Zresetuj pola autoinkrementacji

  2. Jak upewnić się, że Twoja baza danych MySQL jest zabezpieczona?

  3. zmień domyślny silnik mysql na innodb

  4. Jeśli inaczej w klauzuli WHERE

  5. Sparametryzowane zapytania PHP/MySQL