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!