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

Langage SQL Discussion :

Afficher les doublons d'une table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut Afficher les doublons d'une table
    Bonjour,
    Je souhaite afficher les doublons d'une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    idpersonne      | idspecialite    | idtype
    ----------------+-------------------+-------
       290000001 |              11 |     7
         290000002 |                10 |     7
       290000003 |              11 |     7
         290000004 |                  8 |     7
       290000005 |              11 |     7
         290000006 |                10 |     7
         290000007 |                  8 |     7
       290000008 |              11 |     7
       290000009 |              11 |     7
         290000010 |                10 |     7
         290000011 |                10 |     7
     290000012 |                11 |     7
         290000013 |                11 |     7
         290000014 |                10 |     7
         290000015 |                11 |     7
         290000016 |                10 |     7
         290000017 |                11 |     7
         290000018 |                11 |     7
         290000019 |                11 |     7
         290000020 |                11 |     7
         290000021 |                11 |     7
         290000022 |                11 |     7
         290000023 |                11 |     7
         290000024 |                11 |     7
         290000025 |                 8 |     7
         290000026 |                11 |     7
         290000027 |                11 |     7
         290000028 |                11 |     7
         290000029 |                11 |     7
         290000030 |                11 |     7
         290000031 |                11 |     7
         290000032 |                11 |     7
         290000033 |                11 |     7
         290000034 |                11 |     7
         290000035 |                11 |     7
         290000036 |                 8 |     7
         290000037 |                11 |     7
    Je voudrais afficher par exemple toutes les lignes qui sont gras.
    J'ai fait une requête comme ceci (mysql):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM personne T1
    WHERE  EXISTS (SELECT *
                   FROM    personne T2
                   WHERE  T1.idpersonne <> T2.idpersonne
                     AND  T1.idspecialite = T2.idspecialite
                     AND  T1.idtype = T2.idtype);
    ça ne marche pas.
    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Peut-être quelques choses du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT idspecialiste, idtype, count(idpersonne) as num_occurence, array_accum(idpersonne) FROM personne GROUP BY idspecialiste, idtype HAVING count(idpersonne) > 1;
    (non testée, j'ai un doute sur l'ordre group by, having)

  3. #3
    Membre habitué Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Points : 150
    Points
    150
    Par défaut
    Bizarre la même requete passe pour moi sous SQL Server

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM dbo.TOTO T1
    WHERE EXISTS (SELECT * FROM dbo.TOTO T2
    			  WHERE T1.id<>T2.id
    			AND T1.nom1=T2.nom1
    			AND T1.nom2=T2.nom2)
    C'est en faisant n'importe quoi qu'on devient n'importe qui
    Si un message vous a aidé, n'hésitez pas à mettre +1

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par bretus Voir le message
    Bonjour,

    Peut-être quelques choses du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT idspecialiste, idtype, count(idpersonne) as num_occurence, array_accum(idpersonne) FROM personne GROUP BY idspecialiste, idtype HAVING count(idpersonne) > 1;
    (non testée, j'ai un doute sur l'ordre group by, having)
    Merci pour votre réponse, ça a l'air de marcher, je testerai sur ma vraie base lundi.
    Encore merci.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par tfc3146 Voir le message
    Bizarre la même requete passe pour moi sous SQL Server

    SELECT * FROM dwh_anael.dbo.TOTO T1
    WHERE EXISTS (SELECT * FROM dbo.TOTO T2
    WHERE T1.id<>T2.id
    AND T1.nom1=T2.nom1
    AND T1.nom2=T2.nom2)
    Oui, c'est bizarre ça passe pas sur mysql.
    Merci pour la réponse.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par allouchi Voir le message
    Merci pour votre réponse, ça a l'air de marcher, je testerai sur ma vraie base lundi.
    Encore merci.
    Par contre, je ne connais pas cette fonction : array_accum()?

  7. #7
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par allouchi Voir le message
    Par contre, je ne connais pas cette fonction : array_accum()?
    Spécifique à MySQL, elle agrège les résultats.

    Si vous avez besoin des résultats sur plusieurs lignes, ça ressemblerait plutôt à cela avec un sub-select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT p.idpersonne,p.idspecialiste,p.idtype 
    	FROM ( SELECT idspecialiste,idtype,count(idpersonne) as num_occurence FROM personne p1 GROUP BY idspecialiste,idtype HAVING count(idpersonne) > 1 ) as doublon
    		LEFT JOIN personne p ON doublon.idspecialiste = p.idspecialiste AND doublon.idtype = p.idtype;
    Sélection des doublons avec comptage sur (idspecialiste,idtype) et jointure sur la table personne.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    et pourquoi pas :


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
      FROM (SELECT T1.Idspecialite,
                   T1.Idtype
              FROM Personne T1
              GROUP BY T1.Idspecialite, T1.Idtype
              HAVING COUNT(*) > 1) AS S
        INNER JOIN Personne T2 ON (T2.Idspecialite = S.Idspecialite AND T2.Idtype = S.Idtype)
    Merci d'ajouter un sur les tags qui vous ont aidé

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par bretus Voir le message
    Spécifique à MySQL, elle agrège les résultats.

    Si vous avez besoin des résultats sur plusieurs lignes, ça ressemblerait plutôt à cela avec un sub-select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT p.idpersonne,p.idspecialiste,p.idtype 
    	FROM ( SELECT idspecialiste,idtype,count(idpersonne) as num_occurence FROM personne p1 GROUP BY idspecialiste,idtype HAVING count(idpersonne) > 1 ) as doublon
    		LEFT JOIN personne p ON doublon.idspecialiste = p.idspecialiste AND doublon.idtype = p.idtype;
    Sélection des doublons avec comptage sur (idspecialiste,idtype) et jointure sur la table personne.
    Merci, c'est exactement ce que je veux. Il me reste à tester cette requete sur une base sous postgrès.
    Merci beaucoup.

  10. #10
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    De rien,

    Celle-ci je l'ai testée sous postgres

    Bonne continuation

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Réponses: 2
    Dernier message: 21/04/2009, 21h10
  3. Comment supprimer les doublons d'une table?!
    Par JauB dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/01/2006, 08h48
  4. Réponses: 2
    Dernier message: 27/12/2005, 20h09
  5. afficher les chomp d'une table
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/10/2005, 10h10

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