0
votes

MySQL Supprimer la ligne avec le groupe Count (*) et avoir

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


1 commentaires

Voulez-vous supprimer tous les enregistrements dupliqués ou garder un dans chaque groupe de doublons?


3 Réponses :


2
votes

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 


1 commentaires

@Gmb .. Merci d'édition .. (J'ai des problèmes de Dysgraphia que lorsque j'écris en anglais sont accentués) .. Beaucoup de Thansk .. upvoté



1
votes

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
)


2 commentaires

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 duplicate (réponse par @scaifin) ou en conservez un dans chaque groupe (ma réponse).



0
votes

Je recommanderais d'écrire cela comme: xxx


0 commentaires