Supprimer les doublons d'une base ? - SQL/NoSQL - Programmation
Marsh Posté le 30-04-2003 à 10:59:39
| molosse a écrit : Bonjour,   | 
 
et bien comme ça, je dirais qu'il faudrait exécuter une requête select * from xxx, puis comparer chaque résultat dans une boucle for à tous les résultats de cette même requête sous un autre nom ! 
 
C'est pt pas très clair, mais le principe est là 
Marsh Posté le 30-04-2003 à 11:04:47
Peut être un truc genre 
Delete from ( 
   Select distinct * from TATABLE 
};
Marsh Posté le 30-04-2003 à 11:05:38
| El_gringo a écrit : Peut être un truc genre  | 
 
ah oui, c'est vrai, y'a de l'idée 
Marsh Posté le 30-04-2003 à 11:07:08
faudrait faire le contraire en fait
Marsh Posté le 30-04-2003 à 11:12:57
Une base de données par définition c'est pas sensé ne pas contenir de doublons justement?
Marsh Posté le 30-04-2003 à 11:14:58
| nero27 a écrit :   | 
 
 
Ouais, sauf que ça serait plus 
Delete from TATABLE where ( 
  Select distinct * from TATABLE 
}; 
 
en fait.
Marsh Posté le 30-04-2003 à 11:20:42
| El_gringo a écrit :   | 
 
C'est vrai que ça m'a l'air plus correct (j'avais complètement oublié "distinct"  )
)
Marsh Posté le 30-04-2003 à 11:25:07
| El_gringo a écrit :   | 
 
 
Euhh Ca ca va me laisser un exemplaire unique de tous ceux qui etaient en doublons, mais ca va m'effacer aussi ceux qui n'avaient pas de doublons non ?
Marsh Posté le 30-04-2003 à 11:26:49
| molosse a écrit :   | 
 
yesh
Marsh Posté le 30-04-2003 à 11:26:56
| molosse a écrit :   | 
 
 
Si ! 
Marsh Posté le 30-04-2003 à 11:30:59
Mais comme ça : 
DELETE FROM Tatable WHERE ( 
   SELECT DISTINCT * FROM Tatable 
   INTERSECT 
   SELECT * FROM Tatable; 
) 
ça roule (j'pense  )
) 
 
PS:Essaye d'abbord de faier un : 
   SELECT DISTINCT * FROM Tatable 
   INTERSECT 
   SELECT * FROM Tatable; 
histoire de voir ce que ça te sort.
Marsh Posté le 30-04-2003 à 11:31:14
PAs de solutions ?
Marsh Posté le 30-04-2003 à 11:31:45
Bien pensé el gringo .. j'essaye ca ce soir ..
Marsh Posté le 30-04-2003 à 11:32:45
Euhh non a bien y reflechir ca va faire pareil (le select distinct est inclu dans le select simple, d'ou l'intersection=select distinct : la meme merde ..) 
 
 
Marsh Posté le 30-04-2003 à 11:33:40
On peu faire des Moins ?
Marsh Posté le 30-04-2003 à 11:34:15
faut faire 
DELETE 
  select * 
  intersect 
  select distinct
Marsh Posté le 30-04-2003 à 11:37:54
| Urd-sama a écrit : faut faire  | 
 
 
c exactement la même chose que j'ai fait (une intersection c'est... je sais plus le mot, mais c'est pareil dans un sens ou dans l'autre !)
Marsh Posté le 30-04-2003 à 11:38:28
on est cons, c'est MINUS qu'il faut utiliser
Marsh Posté le 30-04-2003 à 11:42:53
Ouaip .. minus a l'air d'etre OK ...   
  
 
Merci les gars !!
Marsh Posté le 30-04-2003 à 11:43:00
....Vooooila. J'étais sure qu'il y avait un truc pour faire ça.
Marsh Posté le 30-04-2003 à 11:44:05
rien de tel qu'une présentation en patate sur le papier pour s'y retrouver   
 
Marsh Posté le 30-04-2003 à 11:45:40
| Urd-sama a écrit : rien de tel qu'une présentation en patate sur le papier pour s'y retrouver   | 
 
jolie métaphore 
Marsh Posté le 30-04-2003 à 11:46:33
| nero27 a écrit :   | 
 
mais non, ca a un nom mathématique ces trucs 
les "ensembles" machin-chose là
Marsh Posté le 30-04-2003 à 11:47:57
Et dire que je finis ma thèse en mathématiques pures en ce moment   
 
Marsh Posté le 30-04-2003 à 11:50:03
| molosse a écrit : Et dire que je finis ma thèse en mathématiques pures en ce moment   | 
 
petit joueur... 
 
 
 
 
... ![[:dehors2] [:dehors2]](https://forum-images.hardware.fr/images/perso/dehors2.gif) 
 
Marsh Posté le 30-04-2003 à 11:50:06
| Urd-sama a écrit :   | 
 
 
les ensembles tout court j'crois !
Marsh Posté le 30-04-2003 à 11:51:37
theorie des ensembles oui ...
Marsh Posté le 30-04-2003 à 12:00:31
Euhh la syntaxe exacte c'est quoi ? 
 
SELECT * FROM ((select * from base) minus (select distinct * from base)) 
Marsh Posté le 30-04-2003 à 12:01:25
((select * from base) minus (select distinct * from base))  
 tout court pour l'instant
Marsh Posté le 30-04-2003 à 12:04:09
Il me dit 'erreur de syntaxe near ...'
Marsh Posté le 30-04-2003 à 12:05:04
mysql ne supporte peut-etre pas MINUS, ou alors c'est un autre mot
Marsh Posté le 30-04-2003 à 12:37:04
| Urd-sama a écrit : mysql ne supporte peut-etre pas MINUS, ou alors c'est un autre mot   | 
 
 
MySQL ne reconnait pas les requetes imbriquées alors pour le MINUS, tu peux oublier.  
 
Utilise des clés primaires pour eviter les doublons ou un vrai SGBD.
Marsh Posté le 30-04-2003 à 12:56:18
solution brutale :  
createdb manewdbpasredondante 
createtable toutes tes tables puis pour chacune : 
select distinct * from tatable; 
 
puis insert de chaque résultat dans ta nouvelle DB. 
 
solution moins bourrin, utilise un vrai SGBDR, revois ta conception des tables (à part dans certains cas précis, avoir des doublons c avoir une mauvaise conception), ou bien encore, passe à une version de MySQL vraiment relationelle (utilisant innoDB et requêtes imbriquées). 
 
Marsh Posté le 30-04-2003 à 13:05:56
Ok c'est encore le mieux. 
 
Merci à vous tous !
Marsh Posté le 05-07-2012 à 14:39:54
Le blog suivant donne une solution basée sur la commande mySQL Alter Ignore : 
http://blogmotion.fr/programmation [...] ssion-1588
Marsh Posté le 06-07-2012 à 08:23:34
En 9 ans, 2 mois et 5 jours, je crois qu'il aura trouvé une solution...
Marsh Posté le 30-04-2003 à 10:56:08
Bonjour,
J'aimerais savoir s'il existe un moyen plus ou moins simple d'effacer les doublons d'une base MySQL ?
---------------
Mon comparateur de prix préféré (le miens !):www.infomoinscher.net