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 :

Comment sélectionner que les lignes doublons


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Comment sélectionner que les lignes doublons
    Bonjour, je cherche une solution afin de n'afficher que les lignes qui apparaissent plusieurs fois, je vous met un petit exemple qui sera certainement plus clair :

    Nom Prénom Titre
    azerty 111 essai
    qsdfgh 222 poiu
    qsdfgh 222 true
    wxcvbn 333 essai

    j'aimerai savoir comment faire pour conserver que les valeurs des lignes 2 et 3 qui ont comme point commun le même nom et prénom.

    D'avance merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740

  3. #3
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    n'afficher que les lignes qui apparaissent plusieurs fois
    Essayer avec cette requete:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select T1.Nom, T1.Prenom
    From Ma_Table T1
    Where 1<(select count(*) NB
                   From Ma_Table T2
                   Where T1.Nom=T2.Nom
                   And T1.Prenom=T2.Prenom)



  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut merci pour la réponse,
    mais a quoi correspond la table T2 ?????

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    voici ma requete de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select I.Nom, I.Prenom, * from planelem E
    LEFT OUTER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    where E.idplan ='8'
    and I.Nom is not null
    order by I.Nom, I.Prenom

  6. #6
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut Travailler avec 2 alias de la même table c'est comme travailler sur deux tables
    Citation Envoyé par Inconnu_du_69 Voir le message
    mais a quoi correspond la table T2 ?????
    C'est la même table! c'est un alias.

    C'est-à-dire deux copies de la même table.
    Travailler avec 2 alias de la même table c'est comme si vous travailliez sur deux tables.


  7. #7
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Distinct E.Individu ,I.Nom, I.Prenom, * 
    FROM planelem E
    INNER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    where I.Nom is not null
    AND 1<(SELECT count(*) NB
                   FROM INDIVIDU I2
                   WHERE I.Nom=I2.NOM
                   AND I.Prenom=I2.Prenom)
    order by I.Nom, I.Prenom
    C'est en supposant que (Nom,Prenom) est le clé de Individu.


  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    voici ma requete après les modifs, par contre cela ne marche pas car j'ai toutjours aussi les lignes "unique" et pas seulement les lignes en doubles. Pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select I.Nom, I.Prenom, * from planelem E
    LEFT OUTER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    where 1<(SELECT count(*) NB
                   FROM planelem T2
    	LEFT OUTER JOIN INDIVIDU I2 ON T2.INDIVIDU = I2.INDIVIDU
                   WHERE I.Nom=I2.Nom
                   AND I.Prenom=I2.Prenom)
    and E.idplan ='8'
    and I.Nom is not null
    order by I.Nom, I.Prenom
    merci pour votre aide.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    Il faut que tu ajoutes T2.INDIVIDU = E.INDIVIDU dans le WHERE de la sous-requête.

  10. #10
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Il faut que tu ajoutes T2.INDIVIDU = E.INDIVIDU dans le WHERE de la sous-requête.
    Effectivement.

    2ème: Pour Inconnu_de_96 , pourquoi tu utilise Left join?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT OUTER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    !!!
    Utiliser

  11. #11
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    malgré vos modifications, cela ne marche toujours pas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT distinct E.Individu,I.Nom, I.Prenom, * 
    FROM planelem E
      INNER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    WHERE 1<(SELECT count(T2.individu) 
                   FROM planelem T2
    	       LEFT JOIN INDIVIDU I2 ON T2.INDIVIDU = I2.INDIVIDU
                   WHERE  T2.individu = E.Individu
    		AND I.Nom=I2.Nom
                   AND I.Prenom=I2.Prenom)
    AND E.idplan ='8'
    AND I.Nom IS NOT NULL
    ORDER BY I.Nom, I.Prenom

  12. #12
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    Et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT DISTINCT E.Individu,I.Nom, I.Prenom, * 
    FROM planelem E
      INNER JOIN INDIVIDU I ON E.INDIVIDU = I.INDIVIDU
    WHERE 1<(SELECT count(T2.individu) 
                   FROM planelem T2
    	         INNER JOIN INDIVIDU I2 ON T2.INDIVIDU = I2.INDIVIDU
                   WHERE  T2.individu = E.Individu
    		AND I.Nom=I2.Nom
                   AND I.Prenom=I2.Prenom)
    AND E.idplan ='8'
    AND I.Nom IS NOT NULL
    ORDER BY I.Nom, I.Prenom

  13. #13
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    non cela ne marche toujours pas.

  14. #14
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    Peux-tu nous poster le code de création de tes trois tables, ainsi qu'un échantillon de données ?

  15. #15
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Peux-tu nous poster le code de création de tes trois tables, ainsi qu'un échantillon de données ?

    Etant novice, comme faut il faire pour obtenir les infos ?

  16. #16
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    j'ai pas suivi mais je me lance

    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
     
    SELECT 
               COUNT(*) AS Nbre_Doublons
             , I.Nom
             , I.Prenom
     
    FROM 
            planelem E LEFT JOIN INDIVIDU I 
                           ON E.INDIVIDU = I.INDIVIDU
     
    WHERE E.idplan = '8'
        AND I.Nom IS NOT NULL
     
    GROUP BY I.Nom
             , I.Prenom
     
    HAVING
            COUNT(*) >1

  17. #17
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    Citation Envoyé par Inconnu_du_69 Voir le message
    Etant novice, comme faut il faire pour obtenir les infos ?
    Pour le code de création des tables, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE nomtable ;
    Pour l'échantillon de données... tu rédiges les requêtes INSERT nous permettant de mettre les trois-quatre lignes nous permettant de tester.

  18. #18
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    je pense que si tu ajoutes un groupe by et une clause having pour selectionner les blocs qui contiennent plus de deux lignes,tu seras arrive


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    group by nom,prenom 
    having count(*)>=2;

  19. #19
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 960
    Points : 4 389
    Points
    4 389
    Par défaut
    quick and dirty :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * 
    from (select nom, prenom, count(*) as n 
      from INDIVIDU 
      group by concat(nom, prenom)
    ) as t 
    where n > 1
    évidemment "concat()" dans un "group by" ce n'est certes pas ce qui se fait de plus rapide…

  20. #20
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    JeitEmgie, outre le fait que la bonne méthode avec HAVING et sans concaténation soit donnée au-dessus, le fait d'assimiler la concaténation de deux champs au couple de champ comporte un risque de faux doublon !
    Le problème est similaire à :
    Si
    a + b = c
    a1 + b1 = c
    Alors a = a1 et b = b1
    ... on est tous d'accord, c'est faux.

    Ici, si les prénoms sont en minuscule sauf le permier caractère, il y a peu de chances d'arriver à ce genre de confusion.
    Si ce n'est pas le cas, voici un petit exemple :

    Nom Prénom
    SMIT HELEN
    SMITH ELEN

    Note :
    1) il y existe apparemment un rugbyman s'appelant SMIT...
    2) ELEN et HELEN existent tous les deux comme prénoms... (pas étonnant)
    3) Euh, pourquoi je fais chier pour des détails ???

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/06/2015, 11h27
  2. Réponses: 6
    Dernier message: 10/11/2009, 12h58
  3. Réponses: 7
    Dernier message: 02/07/2009, 12h20
  4. Réponses: 2
    Dernier message: 30/03/2009, 14h13
  5. Réponses: 11
    Dernier message: 22/04/2008, 23h23

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