Bonjour, comment faire pour supprimer des doublons dans une table sql serveur 2005, faut il faire un programme ou bien existe t il une solution par le language sql ?
merci
Bonjour, comment faire pour supprimer des doublons dans une table sql serveur 2005, faut il faire un programme ou bien existe t il une solution par le language sql ?
merci
pour les supprimer dans une requete select, il faut utiliser distinct:
pour les effacer de la table, il faut reperer un identifiant ou utiliser l'oid (sous postgre par exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select distinct * from table;
Vous pouvez peut être vous inspirer de cette méthode valable pour Oracle http://oracle.developpez.com/faq/?page=3-1#doublons sachant que le ROWID est un identifiant interne unique pour chaque ligne d'une table.
Il n'y a malheuresement pas d'identificateur de Row unique sous SQL Server, en tout cas pas à l'époque de ce documentEnvoyé par Magnus
Pour identifier quelle sont les lignes en doublon il suffit de faire une requete du type :
avec COLONNE_1, COLONNE_N ta clé primaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT COLONNE_1, COLONNE_N,count(*) FROM TABLE1 HAVING COUNT(*)>1;
Cette requete va te donner toutes les lignes qui sont en double.
impossible de faire une key primaire avec
c'est justement dans le couple COLONNE_1, COLONNE_N qu'il y a des doublons, SQL Serveur refuse de créer la clef vu qu'il y a des doublons
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2SELECT COLONNE_1, COLONNE_N
![]()
SQLPro propose une technique de suppression de doublons dans cet article qui convient pour SQL Server.Envoyé par Gaël Donat
En plus, ses techniques sont conformes vis-à-vis de la norme SQL.
je ne sais pas comment passer l'ordre sql cité dans l'exemple
le T1 ne plait pas à sql serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 DELETE FROM T_DOUBLON T1 WHERE EXISTS (SELECT * FROM T_DOUBLON T2 WHERE T1.NUM = T2.NUM![]()
Quand je disais ta clé primaire, je parlais evidemment de celle que tu ne peux pas faire a cause des doublons !Envoyé par nutix2003
Pas besoin que la clé soit effective, juste que la liste des colonnes de la requete correponde à la liste des colonnes de la clé "voulue".
Mais le mieux c'est de prendre le lien fourni par Magnus !
c'est peut-être un peu naif, mais le plus simple me semble de créer une autre table par un select distinct * et d'écraser ensuite la première table
Non non ce n'est pas naïf, c'est même une des solutions préconisées par SQLPro dans cet article (dont j'ai indiqué le lien plus haut).Envoyé par cdu
je suis sur le lien, j'essaye d'utiliser la partie avec copy de table mais je bute (je suis vraiment débutant dans le Transac SQL et procédure stockée) je n'arrive pas à faire
j'ai comme erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DELETE FROM T_DOUBLON T1 WHERE EXISTS (SELECT * FROM T_DOUBLON T2 WHERE T1.NUM = T2.NUM AND T1.NOM = T2.NOM AND T1.PRENOM = T2.PRENOM GROUP BY NUM, NOM, PRENOM HAVING COUNT(*) > 1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2syntaxe incorrecte vers 'T1'
![]()
Je ne connais pas SQL Server mais essayez d'enlever le mot clé FROM après DELETE.
Si vous n'obtenez toujours pas le résultat attendu alors postez votre éventuel nouveau message d'erreur et je déplacerai votre discussion dans le forum SQL Server.
ok ça marche, j'ai tout mis dans une procédure stocké
merci
Partager