Maison > base de données > tutoriel mysql > Comment supprimer tous les enregistrements sauf les N derniers dans MySQL à l'aide d'une seule requête ?

Comment supprimer tous les enregistrements sauf les N derniers dans MySQL à l'aide d'une seule requête ?

Barbara Streisand
Libérer: 2025-01-08 16:26:41
original
992 Les gens l'ont consulté

How to Delete All but the Latest N Records in MySQL Using a Single Query?

Utilisez une requête SQL pour supprimer tous les enregistrements à l'exception des N derniers enregistrements

Dans MySQL, il est possible de supprimer tous les enregistrements d'une table à l'exception des N derniers enregistrements triés par ID décroissant. Ceci peut être réalisé en utilisant une seule requête MySQL, bien que ce ne soit pas aussi simple que prévu.

Utilisez simplement une requête comme celle-ci :

delete from table order by id ASC limit ((select count(*) from table ) - N)
Copier après la connexion

échouera car la valeur de la clause LIMIT ne peut pas être spécifiée à l'aide d'une sous-requête. Pour y parvenir, une requête plus complexe est nécessaire :

DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT N
  ) foo
);
Copier après la connexion

Dans cette requête, utilisez une sous-requête intermédiaire pour sélectionner les ID des N derniers enregistrements. La requête principale utilise ensuite cette sous-requête dans un opérateur NOT IN pour exclure ces enregistrements du processus de suppression. Cette approche nous permet de contourner les limitations liées à l'utilisation de sous-requêtes directement dans la clause LIMIT ou dans la clause FROM de la requête principale.

Il est à noter que la sous-requête intermédiaire est essentielle. Sans cela, nous rencontrerions des erreurs liées au référencement de la table supprimée dans une sous-requête et des limitations imposées par les versions antérieures de MySQL qui ne prenaient pas en charge l'utilisation d'une clause LIMIT dans une sous-requête utilisée dans l'opérateur NOT IN.

En utilisant cette requête, vous pouvez supprimer efficacement tous les enregistrements de la table à l'exception des N derniers enregistrements triés par une colonne spécifique, garantissant ainsi que les dernières données sont conservées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal