J'ai cette requête où je reçois toutes les doubles entrées avec le même article et la catégorieID = 2153 Maintenant, je veux supprimer ces lignes. Mais cela semble ne pas fonctionner directement. Je l'ai donc essayé avec sous-requête, mais quand j'utilise dans j'aurais besoin d'une sous-requête qui ne renvoie que l'ID. Mais ce n'est pas non plus possible.
Comment puis-je supprimer les lignes de cette requête? P>
SELECT id, articleID, categoryID, count(*) AS count FROM `s_articles_categories` GROUP BY articleID HAVING count(*) > 1 AND categoryID = 2153
3 Réponses :
En supposant que l'ID est la clé principale de la table S_Articles_categories, vous pouvez utiliser une jointure sur le résultat du sous-sélection.
Pour supprimer toutes les lignes: P>
delete r.* from s_articles_categories r INNER JOIN ( SELECT id, articleID, categoryID, count(*) AS count FROM `s_articles_categories` r GROUP BY articleID HAVING count(*) > 1 AND categoryID = 2153 ) t on t.id = r.id
@Gmb .. Merci d'édition .. (J'ai des problèmes de Dysgraphia que lorsque j'écris en anglais sont accentués) .. Beaucoup de Thansk .. upvoté
Si vous souhaitez supprimer tous les doublons mais conserver l'un d'entre eux dans chaque groupe, vous pouvez utiliser la requête suivante:
DELETE FROM `s_articles_categories` s WHERE s.categoryID = 2153 AND EXISTS ( SELECT 1 FROM `s_articles_categories` s1 WHERE s1.articleID = s.articleID AND s1.categoryID = s.categoryID AND s1.id < s.id )
Merci. Mais je dois supprimer uniquement les duplicats où la catégorie est 2153
@ user3586022: requête mise à jour. Mais toujours, il vous suffirait de dire à utiliser si vous souhaitez supprimer tous i> duplicate (réponse par @scaifin) ou en conservez un dans chaque groupe (ma réponse).
Je recommanderais d'écrire cela comme:
Voulez-vous supprimer tous les enregistrements dupliqués ou garder un dans chaque groupe de doublons?