IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Suppression de doublons


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 168
    Points : 111
    Points
    111
    Par défaut doublons dans une table sql
    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

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 194
    Points : 220
    Points
    220
    Par défaut
    pour les supprimer dans une requete select, il faut utiliser distinct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select distinct * from table;
    pour les effacer de la table, il faut reperer un identifiant ou utiliser l'oid (sous postgre par exemple)

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Citation Envoyé par Magnus
    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 document

    Pour identifier quelle sont les lignes en doublon il suffit de faire une requete du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COLONNE_1, COLONNE_N,count(*) FROM TABLE1 HAVING COUNT(*)>1;
    avec COLONNE_1, COLONNE_N ta clé primaire.

    Cette requete va te donner toutes les lignes qui sont en double.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 168
    Points : 111
    Points
    111
    Par défaut
    impossible de faire une key primaire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COLONNE_1, COLONNE_N
    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

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par Gaël Donat
    Il n'y a malheuresement pas d'identificateur de Row unique sous SQL Server, en tout cas pas à l'époque de ce document
    SQLPro propose une technique de suppression de doublons dans cet article qui convient pour SQL Server.
    En plus, ses techniques sont conformes vis-à-vis de la norme SQL.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 168
    Points : 111
    Points
    111
    Par défaut
    je ne sais pas comment passer l'ordre sql cité dans l'exemple
    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
    le T1 ne plait pas à sql serveur

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Citation Envoyé par nutix2003
    impossible de faire une key primaire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COLONNE_1, COLONNE_N
    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
    Quand je disais ta clé primaire, je parlais evidemment de celle que tu ne peux pas faire a cause des doublons !

    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 !

  9. #9
    cdu
    cdu est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Points : 222
    Points
    222
    Par défaut
    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

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par cdu
    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).

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 168
    Points : 111
    Points
    111
    Par défaut
    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
    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)
    j'ai comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    syntaxe incorrecte vers 'T1'

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 168
    Points : 111
    Points
    111
    Par défaut
    ok ça marche, j'ai tout mis dans une procédure stocké
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression de doublons et insertion
    Par Samish dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/08/2005, 21h57
  2. Réponses: 17
    Dernier message: 03/12/2004, 11h17
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 14h08
  4. Requête de suppression de doublons : besoin d'aide
    Par biocorp dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2004, 17h04
  5. [LG]Suppression de doublons
    Par moustique31 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2003, 21h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo