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 ?
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!