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