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
DDDoriginal
2024-12-25 16:48:15435parcourir

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>

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

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

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
)

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

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