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 :

Résultats d'une jointure gauche


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut Résultats d'une jointure gauche
    bonjour ,

    Je fais une jointure gauche sur deux table via un ETL ( amadea ) mais je pense pas que ca change grand chose au principe et à la réponse que je cherche.

    je fais une jointure donc, et le résultats de la jointure gauche contient plus de ligne que la table de gauche. A quoi cela est-il du ?

    j'ai ( à priori mais je peux pas en être sur vu que la table de droite fait 89 million de ligne ) une ID unique sur laquel je fais la jointure.

    cela implique forcément qu'il y a des doublons de clé dans la table de droite ? ou existe-t-il une autres raison qui ne me vient pas en tête ?

    merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Pas forcément des doublons, ça peut aussi découler de la modélisation.

    Par exemple, vous avez une table d'entêtes de factures et une table de détail avec une association (1,n).

    Si vous faites facture_entete LEFT JOIN facture_detail ON facture_id (je schématise), vous aurez bien comme résultat le nombre de lignes de facture_detail qui sera plus important que le nombre de lignes de facture_entete.

    La jointure externe gauche ramènera par contre au moins autant de lignes que la table de gauche (sans prendre en compte les éventuels filtres de la requête bien entendu).

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut
    D'accord , je vois bien . le problème est que la relation devrait être (1,1)...

    merci

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par hanamachi Voir le message
    D'accord , je vois bien . le problème est que la relation devrait être (1,1)...

    merci
    Pourquoi faire une jointure externe alors ?
    Mais apparemment le résultat vous montre que les cardinalités ne sont peut-être pas tel que vous pensez.

    On ne peut pas en dire plus sans davantage d'informations, demandées par les règles de ce forum.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut
    la "table de gauche" n'est pas réellement une table c'est un fichier excel généré par un collègue.

    la table de gauche est une vue de la table de droite. et ma jointure gauche ne servait qu'à rajouter deux colonnes "oublié"

    il y a forcément cardinalité (1,1) étant les même tables à l'origine.

    avec une jointure interne j'obtiens le même nombre de ligne qu'avec la jointure gauche et toujours supérieur au nombre de valeur de la table de gauche.

    biensur , si le collègue en question n'était pas en vacances je pourrait voir avec lui sa requète et détecter le problème. je ne peux pas vous fournir de structure des tables car l'une des deux est inconnue ... il n'y a que la clé qui soit absolument certaine (il n'y aurait pas 99 % de match si je m'était trompé de clé )

    je demandais juste comme ca... car conceptuellement je comprend pas d'où vienne ses lignes.

    tant pis si vous ne pouvez pas m'en dire plus merci

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Ça peut aussi provenir du critère de jointure, regardez je prends deux fois la même 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
    declare @MaTable table (id_matable tinyint, cd_matable varchar(5), lb_matable varchar(20))
     
    insert into @MaTable (id_matable, cd_matable, lb_matable)
    select 1, 'A', 'Libellé 1' union all
    select 2, 'B', 'Libellé 2' union all
    select 3, 'B', 'Libellé 3';
     
        select *
          from @MaTable as mt1
     left join @MaTable as mt2
            on mt2.id_matable = mt1.id_matable;
     
    id_matable cd_matable lb_matable           id_matable cd_matable lb_matable
    ---------- ---------- -------------------- ---------- ---------- --------------------
    1          A          Libellé 1            1          A          Libellé 1
    2          B          Libellé 2            2          B          Libellé 2
    3          B          Libellé 3            3          B          Libellé 3
     
        select *
          from @MaTable as mt1
     left join @MaTable as mt2
            on mt2.cd_matable = mt1.cd_matable;
     
    id_matable cd_matable lb_matable           id_matable cd_matable lb_matable
    ---------- ---------- -------------------- ---------- ---------- --------------------
    1          A          Libellé 1            1          A          Libellé 1
    2          B          Libellé 2            2          B          Libellé 2
    2          B          Libellé 2            3          B          Libellé 3
    3          B          Libellé 3            2          B          Libellé 2
    3          B          Libellé 3            3          B          Libellé 3

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut
    je suis d'accord avec vous. mais le résultat est bien celui là car le critère de jointure n'est pas unique.On a dans votre 2eme cas le code 'B' qui est en double le miens devrait absolument être unique.

    c'est un numéro de réclamation client. il est créé par auto incrémentation. il ne devrait pas y en avoir en double dans la table droite ( malheureusement pratiquement invérifiable ) Il peut y en avoir sur la vue servant de table gauche par une erreur humaine. Je ne vois que ca.

    je vais me renseigner sur les RG de cette table... peutêtre vais-jé découvrir que les ID ne sont pas unique.

    encore merci de vous vous être penché sur mon problème

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    c'est un numéro de réclamation client. il est créé par auto incrémentation. il ne devrait pas y en avoir en double dans la table droite ( malheureusement pratiquement invérifiable ) Il peut y en avoir sur la vue servant de table gauche par une erreur humaine. Je ne vois que ca.
    Pourtant pas très compliqué à vérifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT la_colonne_a_tester
    FROM la_table
    GROUP BY la_colonne_a_tester
    HAVING COUNT(*) > 1

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

Discussions similaires

  1. Récupérer le résultat d'une jointure rapidement
    Par damien.pelisse dans le forum SQLite
    Réponses: 1
    Dernier message: 07/03/2009, 18h41
  2. Origine des résultats d'une jointure?
    Par Martyin dans le forum Requêtes
    Réponses: 5
    Dernier message: 11/04/2008, 14h18
  3. select d'après le résultat d'une jointure
    Par echabenat dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/03/2008, 11h42
  4. résultat d'une jointure externe un peu bizarroide
    Par phpiste dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/12/2007, 10h42
  5. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 18h10

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