Supprimer les tuples en doubles dans une table [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 06-03-2007 à 16:53:14
J'aurais utilisé un exists
Code :
|
Mais tu peux également le faire avec une jointure de dico sur elle même.
Edit: Ah et si ça rame toujours vérifie tes indexs sur mot et id.
Marsh Posté le 06-03-2007 à 17:03:33
Euh si mot était la clef primaire ça n'aurai pas été plus simple ?
Sinon :
Code :
|
Enfin c'est pas ça mais tu vois le debut de piste.
Marsh Posté le 06-03-2007 à 17:14:15
Fallait déjà que je rentre tout ça dans une BD et fallait que je passe par un id parce qu'il y a des mots en double pour l'instant.
anapajari, ta reqeête n'est toujours pas finie après 10 minutes, je pense que c'est la même chose que moi, il y en a pour des heures !
Marsh Posté le 06-03-2007 à 17:20:17
Et le group by mot en principe si le SGBD est pas mauvais et qu'il y a des bon index ca doit pas mettre 50 ans pour faire un group by.
Sinon requete correlee :
Code :
|
Marsh Posté le 06-03-2007 à 17:53:07
MEI a écrit : Euh si mot était la clef primaire ça n'aurai pas été plus simple ?
|
C'est vrai que y'aurait plus de doublons ... remarque y'aurait même plus de mots
Fused a écrit : Fallait déjà que je rentre tout ça dans une BD et fallait que je passe par un id parce qu'il y a des mots en double pour l'instant. |
T'as vérifié les indexs? t'as fait un reorg sur les tables? tes statistiques sont à jour? C'est quel sgbd?
Que tu aies une idée, la même requete sur une table d'une base db2 chez nous ( nb total d'enregistrements : 942426) met moins de 2 secondes ( 1.96 pour être précis).
edit: par contre c'est vrai que si tu as pas besoin d'identifier les ids à supprimer il suffit d'un petit:
Code :
|
Marsh Posté le 06-03-2007 à 18:04:08
moi perso, si le cas unique, (je veux dire si tu veux simplement supprimer une seule fois tout les mots pour repartir avec une table "propre" ) je ferai betement un script qui recopie l'ancienne table dans une nouvelle; avec un ptit test en + au passage.
Marsh Posté le 08-03-2007 à 15:29:31
effectivement :
insert into newtable (select distinct mot from oldtable);
avec newtable contenant un champ ID auto-incrément
Marsh Posté le 06-03-2007 à 16:29:46
Hello !
J'ai des entrées en double dans une table (un dictionnaire de plus de 13000 mots, donc plus de 13000 tuples).
J'ai fais une requête pour sélectionner les mots en double :
SELECT m1.mot
FROM dico m1
WHERE m1.mot = (SELECT m2.mot
FROM dico m2
WHERE m1.id != m2.id);
Voilà en gros, c'est tout d'abord pour tester si ça fonctionne bien mais le PC plante, (peut être parce qu'il doit vérifier 13000² données soit 169 000 000).
Ou ma requête ne convient peut-être pas ?
Merci pour vos lumières si vous en avez !