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...
...
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