Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql изтрива в една таблица по id от друга таблица

Използвайте delete заедно с join като това:

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

Това се мащабира до произволен брой таблици, напр.:

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

Това ще изтрие от a всички записи, които са препратени от тези записи на b които на свой ред се препращат от c . Можете също така да добавите клауза WHERE по следния начин:

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

Ако искате да ограничите броя редове за изтриване, направете следното:

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

Ако искате да изтриете първите 500 000 реда, трябва да прецизирате кои редове са първи, така че трябва да установите известно подреждане между редовете. С други думи, трябва да сортирате редове по някои критерии и след това да ограничите по този начин:

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. Как да накарам Django да работи с неподдържани MySQL драйвери, като gevent-mysql или MySQL драйвер на Concurrence?

  2. Ключовата дума не се поддържа:„метаданни“ + MySQL

  3. 1 много голяма маса или 3 големи маси? Производителност на MySQL

  4. PHP PDO вмъкване на множество (10000+) едни и същи реда с помощта на bindParam. Добра практика?

  5. Пренареждане / нулиране на първичния ключ за автоматично увеличение