Bonjour,
Je cherche à supprimer les doublons d'une table et laisser un enregistrement (je ne cherche pas à tout supprimer).
Voici les requêtes SQL essayées :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 DELETE FROM sous_chapitres LEFT OUTER JOIN ( SELECT MIN(id_chapitre) as id,titre_sous_chapitre,contenu_sous_chapitre FROM sous_chapitres GROUP BY titre_sous_chapitre, contenu_sous_chapitre ) as t1 ON sous_chapitres.id = t1.id WHERE t1.id IS NULL
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM sous_chapitres T WHERE T.id_chapitre < ANY (SELECT id_chapitre FROM sous_chapitres T2 WHERE T.id_chapitre <> T2.id_chapitre)
Voici l'erreur obtenue :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN (
SELECT MIN(id_chapitre) as id,titre_sous_chapitre,con' at line 2
Qu'est-ce qui ne va pas ?
La première étape, j'y suis arrivé avec :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT COUNT(*) AS nbr_doublon, id_chapitre, titre_sous_chapitre, contenu_sous_chapitre FROM sous_chapitres GROUP BY id_chapitre, titre_sous_chapitre, contenu_sous_chapitre HAVING COUNT(*) > 1
Je sais qu'il est possible de déclarer des champs comme uniques mais cela ne m'intéresse pas. Je voudrais supprimer les doublons en utilisant une requête SQL DELETE.
En parcourant le WEB, j'ai vu qu'il était possible d'utiliser une table secondaire pour comparer les enregistrements et ceux qui sont en double. Mais, ça m'étonnerait que ce n'est pas possible via une simple requête SQL DELETE.
Voici la requête SQL qui marche mais ça n'a pas apporté de différence :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DELETE FROM sous_chapitres WHERE id_chapitre NOT IN ( SELECT MAX(id_chapitre) FROM chapitres GROUP BY id_chapitre
Partager