sql >> Databáze >  >> RDS >> Mysql

Mysql odstranit v jedné tabulce podle ID z jiné tabulky

Použijte delete spolu s join takhle:

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

Toto se změní na libovolný počet tabulek, např.:

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

Toto smaže z a všechny záznamy, na které se odkazuje z těchto záznamů b které jsou zase odkazovány z c . Můžete také přidat klauzuli WHERE takto:

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

Pokud chcete omezit počet řádků ke smazání, postupujte takto:

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

Pokud chcete odstranit prvních 500 000 řádků, musíte upřesnit, které řádky jsou první, takže musíte mezi řádky vytvořit nějaké pořadí. Jinými slovy, musíte seřadit řádky podle určitých kritérií a poté omezit takto:

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. jak získat seřazený výsledek v dotazu mysql?

  2. 4 způsoby, jak zkontrolovat typ dat sloupce v MariaDB

  3. najděte čas, který uplynul mezi dvěma daty v Oracle SQL

  4. Stahování dat do šablony z externí databáze pomocí django