Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1043 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Supprimer les doublons d'une table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer les doublons d'une table

n°1162840
betsamee
Asterisk Zeperyl
Posté le 28-07-2005 à 11:44:35  profilanswer
 

Bonjour
Je cherche une maniere de supprimer les doublons contenus dans ma table:
 
Je pensais faire :

Code :
  1. delete from Tblnm where cle in (select cle from Tblnm group by Tblnm having count(cle)>1)


 
cependant le petit pb c'est que cette requette va m'effacer les deux occurences (ou plus) lorsqu'il y a doublon , alors que je veux pouvoir en garder une.
 
Merci
 
P.S: c'est pas moi qui fait des tables avec des doublons et sans PK

mood
Publicité
Posté le 28-07-2005 à 11:44:35  profilanswer
 

n°1162872
skeye
Posté le 28-07-2005 à 12:00:16  profilanswer
 

Tu dois pouvoir t'en tirer avec un rownum ou un oid, non?


---------------
Can't buy what I want because it's free -
n°1162877
skeye
Posté le 28-07-2005 à 12:04:03  profilanswer
 

ca donnerait truc du style
 

delete from table
where rownum in  
(
 select rownum from table t1
 where exists
 (
  select 1 from table t2
  where t1.rownum > t2.rownum
  and t1.id = t2.id
 )
)


---------------
Can't buy what I want because it's free -
n°1162909
betsamee
Asterisk Zeperyl
Posté le 28-07-2005 à 12:29:24  profilanswer
 

le pb c'est que j'ai MySQL

n°1162915
skeye
Posté le 28-07-2005 à 12:31:28  profilanswer
 

et ya pas de rownum ou d'oid ou une connerie du style sous mysql? :??:


---------------
Can't buy what I want because it's free -
n°1162916
cesarr89
Posté le 28-07-2005 à 12:32:03  profilanswer
 

et?
 
EDIT:  :D  grilled


Message édité par cesarr89 le 28-07-2005 à 12:32:35
n°1162921
skeye
Posté le 28-07-2005 à 12:36:57  profilanswer
 

sinon, solution brutale :
créer une table temporaire, dans laquelle tu insères toute ta table sauf les lignes qui y sont déjà quand tu veux les insérer.
Et ensuite tu vides ta table, et tu rebascules le contenu de ta table temporaire...


---------------
Can't buy what I want because it's free -
n°1162923
betsamee
Asterisk Zeperyl
Posté le 28-07-2005 à 12:38:05  profilanswer
 

erratum il y a bien une collone rowid sur MySQL
 
EDIT : en fait non y a pas


Message édité par betsamee le 28-07-2005 à 12:40:10
n°1162925
skeye
Posté le 28-07-2005 à 12:38:41  profilanswer
 

Alors tout va bien!:D


---------------
Can't buy what I want because it's free -
n°1162928
betsamee
Asterisk Zeperyl
Posté le 28-07-2005 à 12:40:54  profilanswer
 

Citation :


sinon, solution brutale :  
créer une table temporaire, dans laquelle tu insères toute ta table sauf les lignes qui y sont déjà quand tu veux les insérer.  
Et ensuite tu vides ta table, et tu rebascules le contenu de ta table temporaire...


 
c'est ce que j'ai fait mais c'est crade au possible

mood
Publicité
Posté le 28-07-2005 à 12:40:54  profilanswer
 

n°1162929
skeye
Posté le 28-07-2005 à 12:42:15  profilanswer
 

betsamee a écrit :

Citation :


sinon, solution brutale :  
créer une table temporaire, dans laquelle tu insères toute ta table sauf les lignes qui y sont déjà quand tu veux les insérer.  
Et ensuite tu vides ta table, et tu rebascules le contenu de ta table temporaire...


 
c'est ce que j'ai fait mais c'est crade au possible


ah ben ça j'ai pas dit le contraire...[:joce]
Mais quand on a pas le choix on fait avec ce qu'on a...[:skeye]


---------------
Can't buy what I want because it's free -
n°1162932
orafrance
Posté le 28-07-2005 à 12:46:29  profilanswer
 
n°1162993
betsamee
Asterisk Zeperyl
Posté le 28-07-2005 à 13:46:39  profilanswer
 

sympa le lien

n°1163021
Beegee
Posté le 28-07-2005 à 14:07:07  profilanswer
 

si tu passes par une table temporaire, fais un SELECT DISTINCT ... de la table de départ, histoire de ne pas avoir à vérifier dans la table d'arrivée.
 
Exemple:
 

Code :
  1. CREATE TABLE temp_table
  2. AS SELECT DISTINCT ...
  3. FROM table_depart;
  4. DELETE FROM table_depart;
  5. INSERT INTO table_depart
  6. SELECT * FROM temp_table;
  7. COMMIT;
  8. DROP TABLE temp_table;


Message édité par Beegee le 28-07-2005 à 14:07:21
n°1164196
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-07-2005 à 01:38:10  profilanswer
 

t'as pas une clé primaire ? si t'en a pas, tu peux toujours la  rajouter en spécifiant que tu utilises un numéro auto incrément, normalement ça marche.
 
t'as plus qu'à faire la requête avec le rownum mais en utilisant cette clé à la place, et ça devrait marcher. ensuite, tu peux virer cette clé primaire.

n°1164239
skeye
Posté le 29-07-2005 à 08:12:18  profilanswer
 

Arjuna a écrit :

t'as pas une clé primaire ? si t'en a pas, tu peux toujours la  rajouter en spécifiant que tu utilises un numéro auto incrément, normalement ça marche.
 
t'as plus qu'à faire la requête avec le rownum mais en utilisant cette clé à la place, et ça devrait marcher. ensuite, tu peux virer cette clé primaire.


ah oui tiens, bonne idée, ça aussi, en cas de soucis!
Quelqu'un avait posé la même question sur blabla, sous sql server, et ne voyait pas d'autre solution que la table temporaire...celle-ci est probablement meilleure...


---------------
Can't buy what I want because it's free -
n°1164340
betsamee
Asterisk Zeperyl
Posté le 29-07-2005 à 10:14:41  profilanswer
 

merci de votre aide
c'est bien ce que je pensais ; pas de solution qui tient en 1 requete
en fait c'est logique puisque les 2 tuples sont identiques donc impossible d'en isoler un des deux

n°1164343
skeye
Posté le 29-07-2005 à 10:15:16  profilanswer
 

betsamee a écrit :

merci de votre aide
c'est bien ce que je pensais ; pas de solution qui tient en 1 requete
en fait c'est logique puisque les 2 tuples sont identiques donc impossible d'en isoler un des deux


euh.
Ma solution qui utilise le rownum te plait pas?:o


---------------
Can't buy what I want because it's free -
n°1164455
Arjuna
Aircraft Ident.: F-MBSD
Posté le 29-07-2005 à 11:16:08  profilanswer
 

betsamee a écrit :

merci de votre aide
c'est bien ce que je pensais ; pas de solution qui tient en 1 requete
en fait c'est logique puisque les 2 tuples sont identiques donc impossible d'en isoler un des deux


en tout cas, une fois la table nettoyée, rajoute une PK sur ton champ, parceque c'est total n'importe quoi une table sans doublons différenciables.

n°1164559
betsamee
Asterisk Zeperyl
Posté le 29-07-2005 à 12:10:22  profilanswer
 

Citation :


euh.  
Ma solution qui utilise le rownum te plait pas?


elle est super mais pas de rownum avec MySQL finalement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Supprimer les doublons d'une table

 

Sujets relatifs
insertion d'une colonne dans une tableChargement de table dans un dataview
Comment afficher les doublons avec une couleur dans EXCEL ?Comment supprimer une ligne d'un dataset
[Oracle et OCI] Table ou vue inexistanteRechercher dans une table
[RESOLU]document.getElementById().innerHTML = <table>Supprimer une variable dans une session
Supprimer le fichier session, est ce possible..Comment supprimer les doublons d'une Table mysql ?
Plus de sujets relatifs à : Supprimer les doublons d'une table


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR