Maison  >  Article  >  base de données  >  Comment supprimer des enregistrements en fonction de critères spécifiques dans MySQL à l'aide de sous-requêtes ?

Comment supprimer des enregistrements en fonction de critères spécifiques dans MySQL à l'aide de sous-requêtes ?

DDD
DDDoriginal
2024-11-09 22:08:02517parcourir

How to Delete Records Based on a Specific Criteria in MySQL using Subqueries?

Utilisation de sous-requêtes pour la manipulation de données dans MySQL

La tâche à accomplir consiste à supprimer sélectivement des enregistrements d'une table en fonction d'un critère spécifique. En tirant parti des sous-requêtes, nous pouvons y parvenir en utilisant MySQL.

Pour commencer, considérons la requête suivante :

DELETE FROM posts WHERE id NOT IN
(SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15)

Cette requête vise à supprimer les publications qui ne font pas partie des 15 derniers enregistrements, comme ordonné par le champ "horodatage". Cependant, les versions MySQL antérieures à 8.0 rencontrent une erreur lors de la tentative de combinaison d'une clause LIMIT avec une sous-requête IN.

Pour surmonter cette limitation, nous pouvons utiliser une solution de contournement de sous-requête imbriquée. La requête révisée devient :

DELETE 
FROM posts 
WHERE id NOT IN (
      SELECT * FROM (
            SELECT id 
            FROM posts 
            ORDER BY timestamp DESC LIMIT 0, 15
      ) 
      AS t);

Dans cette requête réécrite, nous créons une sous-requête interne pour récupérer les identifiants des 15 dernières publications. La sous-requête externe alias ensuite les résultats à l'aide de la clause "AS t".

En utilisant cette approche de sous-requête imbriquée, nous pouvons efficacement obtenir le résultat souhaité, même avec les anciennes versions de MySQL qui ne prennent pas entièrement en charge la combinaison LIMIT et IN. .

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