Maison > base de données > tutoriel mysql > Comment supprimer efficacement des lignes avec des identifiants non uniques dans MySQL 5.0 ?

Comment supprimer efficacement des lignes avec des identifiants non uniques dans MySQL 5.0 ?

DDD
Libérer: 2024-12-25 16:48:15
original
402 Les gens l'ont consulté

How to Efficiently Delete Rows with Non-Unique IDs in MySQL 5.0?

Correction de la requête MySQL pour la suppression des identifiants non uniques

La requête fournie n'est pas fonctionnelle dans MySQL 5.0. Cet article résout ce problème et propose des solutions alternatives pour supprimer des lignes avec des identifiants non uniques dans MySQL.

Problème d'origine :

DELETE FROM posts WHERE>
Copier après la connexion

Explication :

Cette requête tente de supprimer les lignes de la table "posts" où l'"id" correspond à l'"id" des lignes qui apparaissent plusieurs fois dans le tableau. Cependant, dans MySQL 5.0, il n'est pas possible d'utiliser une sous-requête comme condition dans une instruction DELETE.

Solutions :

1. Utilisation de la clause IN :

Au lieu d'utiliser "=", remplacez la condition par "IN" pour comparer "l'identifiant" avec l'ensemble de résultats de la sous-requête.

DELETE FROM posts WHERE id IN (
  SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1)
)
Copier après la connexion

2. Séparez les requêtes SELECT et DELETE :

Séparez la sous-requête (instruction SELECT) de l'instruction DELETE et exécutez-les séquentiellement.

SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1) INTO @duplicate_ids;
DELETE FROM posts WHERE id IN (@duplicate_ids);
Copier après la connexion

3. Sous-requête imbriquée avec alias :

Imbriquer la sous-requête et alias le résultat à utiliser dans l'instruction DELETE.

DELETE FROM posts WHERE id IN (
  SELECT * FROM (
    SELECT id FROM posts GROUP BY id HAVING (COUNT(id) > 1)
  ) AS p
)
Copier après la connexion

4. Utilisation des JOIN :

Utilisez les JOIN pour comparer l'"id" de la table avec l'ensemble de résultats de la sous-requête.

DELETE a.id
FROM posts AS a
JOIN (
  SELECT id, COUNT(*) AS num
  FROM posts
  GROUP BY id
  HAVING num > 1
) AS b
ON a.id = b.id
Copier après la connexion

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal