Bonjour,
J'ai une table sql avec plusieurs champs. J'aimerai tester si des doublons existent sur deux de ces colonnes dans ma table pour pouvoir les supprimer.
Comment faire?
Merci d'avance!
Bonjour,
J'ai une table sql avec plusieurs champs. J'aimerai tester si des doublons existent sur deux de ces colonnes dans ma table pour pouvoir les supprimer.
Comment faire?
Merci d'avance!
Bonjour,
tu peux faire ceci :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT * FROM taTable GROUP BY champ1, champ2 HAVING COUNT(*) > 1
Saluton,
Tu fais deux SELECT sur la même table chacun sur une des deux colonnes que tu renommes (AS) de manière identique dans les deux SELECT.
Tu mets ces SELECTs en UNION ALL tu comptes dans un GROUP BY et tu ne retiens avec une clause HAVING que les items dont le comptage est supérieur à 1.
Tu vas comme cela détecté les doublons (voire triplets ou plus) aussi bien entre les deux colonnes que dans chacune des colonnes.
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Plutôt marrant, nous avons eu deux interprétations de ton exposé de problème qui débouchent, chacune, sur une solution adaptée.
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Voilà ce que j'ai fait:
J'ai crée une nouvelle colonne dans laquelle j'ai concaténé mes 2 champs.
J'utilise donc cette colonne pour trouver les doublons:
Maintenant comment faire pour les supprimer?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT doublon FROM cv WHERE `upddt` >= '2010-11-19' and upddt <= '2010-11-23' GROUP BY doublon HAVING COUNT(doublon) > 1 ORDER BY `upddt` DESC
Voilà ce que je fais mais j'ai une erreur:
Erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Delete From cv c1 where c1.doublon in (SELECT c2.doublon FROM cv c2 WHERE c2.`upddt` >= '2010-11-19' and c2.upddt <= '2010-11-23 10:27:01' GROUP BY c2.doublon HAVING COUNT(c2.doublon) > 1 ORDER BY `c2`.`upddt` DESC)
Code : Sélectionner tout - Visualiser dans une fenêtre à part #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 'c1 where c1.doublon in (SELECT c2.doublon FROM cv c2 WHERE c2.`upddt` >= '201' at line 1
de mémoire je crois que la syntaxe avec des alias est celle ci :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DELETE alias FROM table AS alias WHERE...
Sinon attention à ton order, il s'effectuera APRES ton group by donc si tu souhaites récupérer toutes les dates décroissantes, c'est raté. J'ai l'habitude de faire même s'il y a surement mieux quelque chose du style :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT C1, C2 FROM ( SELECT C1, C2 FROM table ORDER BY C2 DESC ) GROUP BY C2
Partager